c语言程序设计报告学生信息管理系统.doc
中南大学 C语言程序设计实践报告 题 目 学生信息管理系统 学生姓名 张眼 指导教师 刘伟荣 学 院 信息科学与工程学院 专业班级 电气信息1113班 完成时间 2012年6月28日星期四 1.设计任务及设计目标学生信息管理系统是基于系统主菜单的操作来实现学生数据的录入、修改、查询和统计等系统的基本功能。达到对学生信息的存储、统计、管理的目的。需要处理的数据如:班级、学号、姓名等。实现的功能模块如:数据的录入、数据的修改、数据的插入、数据的查询和数据的统计等。在实践过程中熟练掌握C语言的基本知识:数据类型(整型、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握函数嵌套调用、文件的读写、链表的应用等。2.总体设计我们将整个系统分成若干子模块,每个模块有自己的函数,通过选择结构来实现子模块的选择。设计流程图如下:学生信息管理系统 【1】输入学生信息【2】浏览学生信息【3】查询学生信息【4】删除学生信息【5】修改学生信息【6】不及格学生列表【7】成绩信息查询【8】学生平均成绩【0】退出系统3.详细设计预处理模块:此模块主要是头文件,结构体的定义,以及函数的说明。#include<StdAfx.h>#include <stdio.h>#include <string.h>#include <windows.h>struct student long int num; char name20; int age; char sex4; int class; int pt; /*定义一个变量来储存大学物理的考试成绩*/ int ps; /*定义一个变量来储存大学物理的平时成绩*/ int et; /*定义一个变量来储存英语的考试成绩*/ int es; /*定义一个变量来储存英语夫人平时成绩*/int ct; /*定义一个变量来储存微积分的考试成绩*/int cs; /*定义一个变量来储存微积分的平时成绩*/int xt; /*定义一个变量来储存信号的考试成绩*/int xe; /*定义一个变量来储存信号的平时成绩*/;int n=0;struct student stu100;struct student *p;void tc();void tc()void lr();/*录入函数*/void ll();void cx();/*查询函数*/void xg();/*修改函数*/void sc();/*删除函数*/void bj();/*不及格学生列表函数*/void pj();/*平均成绩计算函数*/void kc();/*课程查询函数*/主函数模块:一般比较简单,只提供输入,处理,输出的调用函数,即只有界面显示语句,子函数选择语句,主要的调用语句。void main()int z; printf("ttt +-+n"); printf("ttt | 学生信息管理系统欢迎您 |n"); printf("ttt +-+n"); printf("ttt + 设计者:张眼n");printf("ttt + 指导老师:刘伟荣n");printf("重要提示:为保证您的操作得到保存,请按正常顺序退出系统!谢谢合作n"); do printf("nttt+n"); printf("ttt|* 菜单 *|n"); printf("ttt+n"); printf("ttt* 1-录入/插入学生信息 *n"); printf("ttt* 2-浏览学生信息 *n"); printf("ttt* 3-查询学生信息 *n"); printf("ttt* 4-删除学生信息 *n"); printf("ttt* 5-修改学生信息 *n"); printf("ttt* 6-不及格学生列表 *n"); printf("ttt* 7-成绩信息查询 *n"); printf("ttt* 8-平均成绩 *n"); printf("ttt* 0-退出系统 *n"); printf("ttt*n"); printf("请输入您的选择:"); scanf("%d", &z); switch(z) case 0 :tc();break; case 1 :lr();break; case 2 :ll();break; case 3 :cx();break; case 4 :sc();break; case 5 :xg();break; case 6 :bj();break; case 7 :kc();break; case 8 :pj();break; default:printf("n无效选项!"); while(z!= 0);运行结果:输入模块:输入部分包括学生的姓名,学号等基本信息以及学生的大学物理,英语,微积和信号的成绩,主要是通过指针来实现数据的输入。用一个指向结构体的指针来进行数据的储存。void lr()/*录入函数*/ int y; if(n=0) p=stu; do printf("-n"); printf("请输入学生的学号:"); scanf("%ld",&p->num); printf("请输入学生的姓名:"); scanf("%s",p->name); printf("请输入学生的年龄:"); scanf("%d",&p->age); printf("请输入学生的性别:"); scanf("%s",p->sex); printf("请输入学生的班级:"); scanf("%d",&p->clas); printf("请输入大物考试成绩:"); scanf("%d",&p->pt); printf("请输入大物平时成绩:"); scanf("%d",&p->ps); printf("请输入英语考试成绩:"); scanf("%d",&p->et); printf("请输入英语平时成绩:"); scanf("%d",&p->es); printf("请输入微积分考试成绩:"); scanf("%d",&p->ct); printf("请输入微积分平时成绩:"); scanf("%d",&p->cs); printf("请输入信号考试成绩:"); scanf("%d",&p->xt); printf("请输入信号平时成绩:"); scanf("%d",&p->xe); n+; p+; printf("n1.继续输入.n0.输入完毕.n"); printf("请选择:"); scanf("%d",&y); while(y=1); printf("提示:输入完毕!你一共输入%d个n",n);运行结果:查询模块:该模块是通过输入的学生信息(学号或姓名)来查找学生的所有信息并且显示在屏幕上。主体通过选择结构对用户的选择进行判断,而后执行相应选择后的语句实现查询。通过函数void cx() 来实现。void cx()/*查询函数*/ int c; int w,i,j=0; char name20; if(n!=0) do printf("n"); printf("+-+n"); printf("| 按学号查询 请按 1 |n"); printf("| 按姓名查询 请按 2 |n"); printf("| 取消 请按 0 |n"); printf("+-+n"); printf("请输入选择:"); scanf("%d", &c); switch(c) case 0:break; case 1: printf("请输入学生的学号;"); scanf("%ld", &w); printf("n"); for(i=0;i<n;i+) if(stui.num=w) printf("n学号t姓名t年龄t性别t班级n"); printf("%ldt%st%dt%st%dn",stui.num,stui.name,stui.age,stui.sex,stui.clas); j=1; if(j=0) printf("提示:没有该学生记录,请核对!"); break; case 2: printf("请输入学生的姓名:"); scanf("%s", name); printf("n"); for(i=0;i<n;i+) if(strcmp(name,stui.name)=0) printf("n学号t姓名t年龄t性别t班级n"); j=1; printf("%ldt%st%dt%st%dn",stui.num,stui.name,stui.age,stui.sex,stui.clas); if(j=0) printf("提示:没有该学生记录,请核对!"); break; default: printf("n提示:无效选项!"); break; while(c!= 0); else printf("提示:无学生数据,请输入数据!");删除模块:该模块通过输入要删除的学生学号,通过学号查找并删除记录。如果没有学生信息输出提示:无学生数据,请输入数据!通过函数void sc() 实现void sc()/*删除函数*/ long int num; int i,j,e; if(n!=0) printf("学号t姓名t年龄t性别t班级n"); printf("-n"); for(i=0;i<n;i+) printf("%ldt%st%dt%st%dn",stui.num,stui.name,stui.age,stui.sex,stui.clas); printf("请输入您要删除的学生的学号:"); scanf("%ld", &num); printf("n"); for(i=0;i<n;i+) if(num=stui.num) j=i; if(j!=(n-1) for(e=j;e<(n-1);e+) stue.num=stue+1.num; strcpy(stue.name,stue+1.name); strcpy(stue.sex,stue+1.sex); stue.age=stue+1.age; stue.clas=stue+1.clas; stue.pt=stue+1.pt; stue.ps=stue+1.ps; stue.et=stue+1.et; stue.es=stue+1.es; stue.ct=stue+1.ct; stue.cs=stue+1.cs; n-; else n-; printf("提示:删除完毕!"); else printf("提示:无学生数据,请输入数据!");运行结果:修改信息模块:该模块通过输入要修改的学生学号查找学生信息,并显示用户修改的内容信息,供用户选择,根据选项进行修改。主体是通过一个switch语句来实现选择的,根据用户的选择进行语句的执行。通过函数void xg() 实现。void xg()/*修改函数*/ long int num; int i,j,c; if(n!=0) printf("请输入您要修改的学生的学号:"); scanf("%ld", &num); printf("n"); for(i=0;i<n;i+) if(stui.num=num) j=i; do printf("请选择您要修改的学生的信息内容:n"); printf("+-+n"); printf("| 姓名 请按 1 |n"); printf("| 年龄 请按 2 |n"); printf("| 性别 请按 3 |n"); printf("| 学号 请按 4 |n"); printf("| 班级 请按 5 |n"); printf("| 大物考试成绩 请按 6 |n"); printf("| 大物平时成绩 请按 7 |n"); printf("| 英语考试成绩 请按 8 |n"); printf("| 英语平时成绩 请按 9 |n"); printf("| 微积分考试成绩 请按10 |n"); printf("| 微积分平时成绩 请按 11 |n"); printf("| 信号考试成绩 请按12 |n"); printf("| 信号平时成绩 请按13 |n"); printf("| 取消 请按 0 |n"); printf("+-+n"); printf("请输入您的选择:"); scanf("%d", &c); printf("n"); switch(c) case 0:break; case 1:printf("请输入新姓名:"); scanf("%s",stuj.name); break; case 2:printf("请输入新年龄:"); scanf("%d",&stuj.age); break; case 3:printf("请输入新性别:"); scanf("%s",stuj.sex); break; case 4:printf("请输入新学号:"); scanf("%ld",&stuj.num); break; case 5:printf("请输入新班级:"); scanf("%d",&stuj.clas); break; case 6:printf("请输入大物考试成绩:"); scanf("%d",&stuj.pt);break; case 7:printf("请输入大物平时成绩:"); scanf("%d",&stuj.ps); break; case 8:printf("请输入英语考试成绩:"); scanf("%d",&stuj.et); break; case 9:printf("请输入英语平时成绩:"); scanf("%d",&stuj.es); break; case 10:printf("请输入微积分考试成绩:"); scanf("%d",&stuj.ct); break; case 11:printf("请输入微积分平时成绩:"); scanf("%d",&stuj.cs);case 12:printf("请输入信号考试成绩:");scanf("%d",&stuj.xt);case 13:printf("请输入信号考试成绩:");scanf("%d",&stuj.xe); break; default: printf("n无效选项!"); break; while(c!= 0); else printf("提示:无学生数据,请输入数据!");运行结果:不及格学生计算模块:该模块通过对已经输入的学生数据进行处理,当四门功课中有一门成绩小于60,就输出此学生的信息及不及格科目的成绩。函数的主体是一个for循环语句的嵌套,外循环来实现成绩的计算,内循环实现不及格的选择。此功能通过函数void bj() 实现。void bj()/*不及格学生列表函数*/ int i,j; char a410="大学物理","大学英语"," 微积分","信号" float l4; if(n!=0) printf("n学号t姓名t课程tt成绩n"); for(i=0;i<n;i+) l0=stui.pt*0.7+stui.ps*0.3; l1=stui.et*0.7+stui.es*0.3; l2=stui.ct*0.7+stui.cs*0.3; l3=stui.xt*0.7+stui.xe*0.3;for(j=0;j<4;j+)if(lj<60.0) printf("%ldt%st%st%3.1fn",stui.num,stui.name,aj,lj);else printf("提示:无学生数据,请输入数据!");运行结果:学生课程信息查询模块:该模块通过用户输入的选项来查询该学生的各个科目的信息,信息包括课程名称,课程编号,学分,平时成绩,考试成绩,综合成绩,并最终以表格的形式输出。此函数主要部分是一个switch()选择语句以及输出函数printf()。该功能通过函数void kc()来实现。void kc()/*课程查询函数*/ int c; int w,i,j=0; char name20; if(n!=0) do printf("n"); printf("+-+n"); printf("| 按学号查询 请按 1 |n"); printf("| 按姓名查询 请按 2 |n"); printf("| 取消 请按 0 |n"); printf("+-+n"); printf("请输入您的选择:"); scanf("%d", &c); switch(c) case 0:break; case 1: printf("请输入学生的学号;"); scanf("%ld", &w); printf("n"); for(i=0;i<n;i+) if(stui.num=w) printf("n课程名称t课程编号t学分t平时成绩t考试成绩t综合成绩n"); printf("大学物理t0001tt4.0t%dtt%dtt%3.1fn",stui.ps,stui.pt,0.7*stui.pt+0.3*stui.ps);printf("大学英语t0002tt4.0t%dtt%dtt%3.1fn",stui.es,stui.et,0.7*stui.et+0.3*stui.es);printf("微积分tt0003tt3.0t%dtt%dtt%3.1fn",stui.cs,stui.ct,0.7*stui.ct+0.3*stui.cs);printf("信号tt0004tt3.0t%dtt%dtt%3.1fn",stui.xt,stui.xe,0.7*stui.xt+0.3*stui.xe); j=1; if(j=0) printf("提示:没有该学生记录,请核对!"); break; case 2: printf("请输入学生的姓名:"); scanf("%s", name); printf("n"); for(i=0;i<n;i+) if(strcmp(name,stui.name)=0) printf("n课程名称t课程编号t学分t平时成绩t考试成绩t综合成绩n"); printf("大学物理t0001t4.0t%dt%dt%3.1fn",stui.ps,stui.pt,0.7*stui.pt+0.3*stui.ps);printf("大学英语t0002t4.0t%dt%dt%3.1fn",stui.es,stui.et,0.7*stui.et+0.3*stui.es);printf("微积分t0003t3.0t%dt%dt%3.1fn",stui.cs,stui.ct,0.7*stui.ct+0.3*stui.cs); j=1; if(j=0) printf("提示:没有该学生记录,请核对!"); break; default: printf("n提示:无效选项!"); break; while(c!= 0); else printf("提示:无学生数据,请输入数据!");运行结果:平均成绩计算模块:该模块通过对已经输入的的学生成绩进行处理,计算出每位同学的平均成绩并以平均成绩为最终成绩进行从高到低的排名。此部分的主体是选择法排序的语句。该功能通过函数void pj() 实现。id pj()/*平均成绩计算函数*/ int i,j; struct student temp; float l4,ave100,m;if(n>1)for(i=0;i<(n-1);i+)for(j=i+1;j<n;j+)avei=(stui.pt*0.7+stui.ps*0.3+stui.et*0.7+stui.es*0.3+stui.ct*0.7+stui.cs*0.3+stui.xt*0.7+stui.xe*0.3)/4;avej=(stuj.pt*0.7+stuj.ps*0.3+stuj.et*0.7+stuj.es*0.3+stuj.ct*0.7+stuj.cs*0.3+stui.xt*0.7+stui.xe*0.3)/4;if(avei<avej)m=avej;temp=stuj;avej=avei;stuj=stui;avei=m;stui=temp;printf("学号t姓名t年龄t性别t班级t平均成绩n");printf("-n");for(i=0;i<n;i+)printf("%ldt%st%dt%st%dt%3.1fn",stui.num,stui.name,stui.age,stui.sex,stui.clas,avei);else if(n=0)printf("提示:无学生数据,请输入数据!");else ave0=(stu0.pt*0.7+stu0.ps*0.3+stu0.et*0.7+stu0.es*0.3+stu0.ct*0.7+stu0.cs*0.3+stu0.xt*0.7+stu0.xe*0.3)/4;printf("学号t姓名t年龄t性别t班级t平均成绩n");printf("-n");printf("%ldt%st%dt%st%dt%3.1fn",stu0.num,stu0.name,stu0.age,stu0.sex,stu0.clas,ave0);退出系统模块:当用户选择退出程序选项【0】时,执行函数void tc()输出“谢谢登陆!再见”而后退出运行。5.设计总结本学期我们的c语言课程实践课题学生信息管理系统是在老师的指导下,同学间相互的帮助下,设计出来的。通过C语言的课程设计,我们对c语言中的重要的内容有了一个很好的认识与了解,同时我们也对c语言的应用有了了解。C语言的实质就是以一定的语法规范为准,通过对数据量的复杂结构运算,完成一定功能的程序,是一门计算机的基础语言,我们通过这两周的课程实践对其特点和算法有了跟好的了解。 通过这次课程设计,我懂得一个程序的设计就是一个实际问题的解决的过程,从解决问题的角度,我们可以这样来看:首先了解这个问题的基本要求,即输入,输出,完成输入到输出的要求是什么,讲问题一一分开;其次,我们要捋清思路,逐一解决问题,着重考虑如何从输入导出输出,在这个过程中,可以确定所需的变量,数据,函数,然后确定处理过程算法。 总的来说,这次实践让我受益匪浅,让我对c语言有了进一步的认识,c语言功能高,表达能力强,使用灵活方便,目标程序效率高,是我们日后学习的良好工具。