收藏 分享(赏)

学生成绩管理系统_课程设计报告.doc

上传人:dreamzhangning 文档编号:2289739 上传时间:2018-09-09 格式:DOC 页数:33 大小:782KB
下载 相关 举报
学生成绩管理系统_课程设计报告.doc_第1页
第1页 / 共33页
学生成绩管理系统_课程设计报告.doc_第2页
第2页 / 共33页
学生成绩管理系统_课程设计报告.doc_第3页
第3页 / 共33页
学生成绩管理系统_课程设计报告.doc_第4页
第4页 / 共33页
学生成绩管理系统_课程设计报告.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、中南大学 C 语 言 程 序 设 计 课 程 设 计 报 告课 题 名 称 : 学 生 成 绩 管 理 系 统专业 电气信息学生姓名 舒畅班级 0914学号 0909091424指导教师 穆帅完成日期 2010 年 7 月 10 日信 息 科 学 与 工 程 学 院1目 录1 课程设计的目的 12 设计内容与要求 13 主要技术指标及特点 23.1 登录界面显示 .23.2 登记学生资料 .33.3 保存学生资料 .43.4 删除学生资料 .43.5 修改学生资料 .63.6 查询学生资料 .73.6 统计学生资料 .73.8 对学生资料进行排序 .93.9 程序主要代码 104 设计小 结

2、.311成绩管理系统1 课程设计的目的1加深对C 语言程序设计课程知识的理解,掌握 C 语言应用程序的开发方法和步骤;2进一步掌握和利用 C 语言进行程设计的能力;3进一步理解和运用结构化程序设计的思想和方法;4初步掌握开发一个小型实用系统的基本方法;5学会调试一个较长程序的基本方法;6学会利用流程图或 N-S 图表示算法;7掌握书写程设计开发文档的能力(书写课程设计报告) 。2 设计内容与要求设计内容:成绩管理系统现有学生成绩信息,内容如下:姓名 学号 C 数学 英语 shuchang 12 99 98 99jiutian 32 87 68 87changzi 33 98 89 99jiut

3、ia 13 7 43 45设计要求: 封面(参见任务书最后一页) 系统描述:分析和描述系统的基本要求和内容; 功能模块结构:包括如何划分功能模块,各功能模块之间的结构图,以及各模块的功能描述; 数据结构设计:设计数据结构以满足系统的功能要求,并加以注释说明; 主要模块的算法说明:即实现该模块的思路; 运行结果:包括典型的界面、输入和输出数据等; 总结:包括 C 语言程序设计实践中遇到的问题,解决问题的过程及体会、收获、对程序开发的认识与思考等。 附录:包括主要程序清单,要有适当的注释,使程序容易阅读。23 主要技术指标及特点程序流程图如下:学生成绩管理系统输入学生信息 更新学生信息 查询学生成

4、绩 统计学生成绩从键盘输入从文件中获取修改学生成绩删除学生成绩排序学生成绩按照学号查找按照姓名查找按照课程名及分数段进行统计按照学号删除按照姓名删除按课程得分降序排列3.1 登录界面显示3此登录界面是预先设定好作为菜单来显示的,在主函数中以 menu()来实现的,在函数中,是通过 switchcase 来实现选择功能的,用户可以通过需要进行选择,方便了用户的使用,非常人性化。3.2 登记学生资料当系统中没有保存学生信息时,就会提示没有学生记录!也就是说不能从文件中导4出,这时就需要用户进行学生资料的导入,当输入的学号已经存在时,系统会提示用户重新输入一个未被占用的学号信息,否则就重新分配内存空

5、间。3.3 保存学生资料该操作是将用户输入的学生信息进行保存,用文件的方法进行调试,当用户输入对象的个数超过 0 时,显示保存成功,否则提示,系统连接为空。53.4 删除学生资料这里又是通过 switchcase 函数的调用,让用户进行选择,共有两种方法:1.按照学号 2.按照姓名,操作完成后,系统会自动提示,该学生已经成功删除,当再次显示的时候,函数中的链表就不再指向该学号,从而起到删除的作用。删除完成后,再次保存一下学生资料,不然系统仍然默认为原始人数。63.5 修改学生资料通过选择到达修改界面:此时将呈现出现有的学生资料,按照要求将新的信息输入其中,再保存资料,如果输入的学号系统中未显示

6、,那么系统则提示没有资料可以修改。这个为修改完的图片73.6 查询学生资料按照选择,则会呈现出用户需要查找的所有信息,每次呈现出来的时候都要用之前定义的 printheader()函数,这个很好地将数据按照格式化的形式显现出来。此为按照学号查找的例子,按照姓名查找是同样道理。3.6 统计学生资料(自加功能)统计学生资料主要还是用的 switchcase 函数,通过选择,用 printheader(),printdata(r),printf(END)等函数用表格的形式将符合条件的学生信息全部显示出来,不过唯一不足的就是所有的学生信息没有能够连贯起来,每个学生信息前面都有表头,没处理好。83.8

7、对学生资料进行排序该图显示的是按照语文成绩排序完的结果,用链表将数据进行一个接一个的比较,按照降序将学生信息排列下来,最后提示排序已经完成,并将所有结果按照用户要求显示出来。3.9 程序主要代码 主函数#include “stdio.h“ /*标准输入输出函数库*/#include “stdlib.h“ /*标准函数库*/#include “string.h“ /*字符串函数库*/#include “conio.h“ /*屏幕操作函数库*/9#define HEADER1 “ -students information- n“#define HEADER2 “ | Number | Name

8、|C|Math|English| Total | Average | n“#define HEADER3 “ |-|-|-|-|-|-|-|“#define FORMAT “ | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |n“#define DATA p-data.num,p-data.name,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave#define END “ - n“int shoudsave=0; /* */struct studentchar num10;/* N

9、umber */char name20;char sex4;int cgrade;int mgrade;int egrade;int total;float ave;char neartime10;/* 最近更新时间 */;typedef struct nodestruct student data;struct node *next;Node,*Link;菜单函数void menu()system(“cls“); /*调用 DOS 命令,清屏.与 clrscr()功能相同*/cprintf(“n“);printf(“Students performance management system

10、nn“);printf(“Menun“);printf(“ *1 input 2 delete *n“);printf(“ *3 search 4 modify *n“);printf(“ *5 insert 6 count *n“);10printf(“ *7 sort 8 save *n“);printf(“ *9 dispaly 0 exit *n“);printf(“n“);/*cprintf()送格式化输出至文本窗口屏幕中*/void printheader() /*格式化输出表头*/printf(HEADER1);printf(HEADER2);printf(HEADER3);vo

11、id printdata(Node *pp) /*格式化输出表中数据*/Node* p;p=pp;printf(FORMAT,DATA);void Wrong()printf(“n=error!n“);void Nofind()printf(“n=No record now!Please press Entern“);void Disp(Link l) /*显示单链表 l 中存储的学生记录,内容为 student 结构中定义的内容*/Node *p;p=l-next; /*l 存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p) /*p=NU

12、LL,NUll 在 stdlib 中定义为 0*/printf(“n=No record now!Please press Entern“);getchar();return;printf(“nn“);printheader(); /*输出表格头部*/while(p) /*逐条输出链表中存储的学生信息*/printdata(p);p=p-next; /*移动直下一个结点*/11printf(HEADER3);getchar();/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess保存要查找的具体内容; nameornum保存按什么查找;在单链表 l 中查找;*/

13、Node* Locate(Link l,char findmess,char nameornum) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */Node *r;if(strcmp(nameornum,“num“)=0) /* 按 Number 查询 */r=l-next;while(r!=NULL)if(strcmp(r-data.num,findmess)=0)return r;r=r-next;else if(strcmp(nameornum,“name“)=0) /* 按 Name 查询 */r=l-next;while(r!=NULL)if(strcmp(r-data.

14、name,findmess)=0)return r;r=r-next;return 0;/*增加学生记录*/void Add(Link l)Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/char ch,flag=0,num10;r=l;s=l-next;system(“cls“);Disp(l); /*先打印出已有的学生信息*/while(r-next!=NULL)12r=r-next; /*将指针移至于链表最末尾,准备添加记录*/while(1) /*一次可输入多条记录,直至输入 Number 为 0 的记录结点添加操作*/while(1) /*输入 Number,

15、保证该 Number 没有被使用,若输入 Number 为 0,则退出添加记录操作*/printf(“please input the Number(pressoto upper level):“);scanf(“%s“,num);flag=0;if(strcmp(num,“0“)=0) /*输入为 0,则退出添加操作,返回主界面*/return;s=l-next;while(s) /*查询该 Number 是否已经存在,若存在则要求重新输入一个未被占用的Number*/if(strcmp(s-data.num,num)=0)flag=1;break;s=s-next;if(flag=1) /

16、*提示用户是否重新输入*/ getchar();printf(“=Number %s existed already!Please press Enter.input again?(y/n):“,num);scanf(“%c“,if(ch=y|ch=Y)continue;elsereturn;elsebreak;p=(Node *)malloc(sizeof(Node); /*申请内存空间*/if(!p)printf(“n Allocate memory failure “); /*如没有申请到,打印提示信息*/return ; /*返回主界面*/strcpy(p-data.num,num);

17、 /*将字符串 num 拷贝到 p-data.num 中*/printf(“please input the Name:“);13scanf(“%s“,p-data.name);getchar();printf(“please input the score of C:“);scanf(“%d“,getchar();printf(“please input the score of Math:“);scanf(“%d“,getchar();printf(“please input the score of English:“);scanf(“%d“,p-data.total=p-data.eg

18、rade+p-data.cgrade+p-data.mgrade;p-data.ave=p-data.total / 3;getchar();/* 信息输入已经完成 */p-next=NULL;r-next=p;r=p;shoudsave=1;查询函数void Qur(Link l) /*按 Number 或 Name,查询学生记录*/int sel; /*1:按 Number 查,2:按 Name 查,其他:返回主界面(菜单)*/char findmess20; /*保存用户输入的查询内容*/Node *p;if(!l-next)/*若链表为空*/system(“cls“);printf(“

19、n=No record now!Please press Entern“);return;system(“cls“);printf(“n=1Search by Numbern=2Search by Namen“);printf(“ select1,2:“);scanf(“%d“,if(sel=1)/* Number */printf(“please input the Number you want to search:“);scanf(“%s“,findmess);p=Locate(l,findmess,“num“);/*在 l 中查找 Number 为 searchinput 值的节点,并

20、返回节点的指针*/if(p)/*若 p!=NULL*/14printheader();printdata(p);printf(END);printf(“press any key to back“);getchar();elseNofind();getchar();else if(sel=2) /* Name */printf(“please input the Name you want to search:“);scanf(“%s“,findmess);p=Locate(l,findmess,“name“);if(p)printheader();printdata(p);printf(EN

21、D);printf(“press any key to back“);getchar();elseNofind();getchar();elseWrong();删除函数/*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/void Del(Link l) /* 删除 */int sel;Node *p,*r;char findmess20;if(!l-next)printf(“n=no record!n“);getchar();return;printf(“n=1Delete by Numbern=2Delete by Namen“);15scanf(“%d“,if(sel=1)pr

22、intf(“please input the Number you want to delete:“);scanf(“%s“,findmess);p=Locate(l,findmess,“num“);if(p)r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(“n=Delete successful!n“);getchar();shoudsave=1;elseNofind();else if(sel=2)printf(“please input the Name you want to delete:“);scanf(“%s“,

23、findmess);p=Locate(l,findmess,“name“);if(p)r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(“n=Delete successful!n“);getchar();shoudsave=1;elseNofind();getchar();elseWrong();getchar();16修改函数/*修改学生记录。先按输入的 Number 查询到该记录,然后提示用户修改 Number 之外的值,Number 不能修改*/void Modify(Link l)Node *p;char findme

24、ss20;if(!l-next) system(“cls“);printf(“n=no record!n“);getchar();return;system(“cls“);printf(“modify the information“);Disp(l);printf(“please input the Number you want to modify:“);scanf(“%s“,findmess);p=Locate(l,findmess,“num“);if(p)printf(“please input the new Number(which was %s):“,p-data.num);sc

25、anf(“%s“,p-data.num);printf(“please input the new Name(which was %s):“,p-data.name);scanf(“%s“,p-data.name);getchar();printf(“please input the new C score(which was %d):“,p-data.cgrade);scanf(“%d“,getchar();printf(“please input the new Math score(which was%d):“,p-data.mgrade);scanf(“%d“,getchar();pr

26、intf(“please input the new English score(which was%d):“,p-data.egrade);scanf(“%d“,p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade;p-data.ave=p-data.total/3;printf(“n=modify successful!n“);shoudsave=1;getchar();elseNofind();getchar();插入函数17/*插入记录:按 Number 查询到要插入的节点的位置,然后在该 Number 之后插入一个新节点。*/v

27、oid Insert(Link l)Link p,v,newinfo; /*p 指向插入位置,newinfo 指新插入记录*/char ch,num10,s10; /*s保存插入点位置之前的 Number,num保存输入的新记录的 Number*/int flag=0;v=l-next;system(“cls“);Disp(l);while(1) printf(“please input the Number you want to insert:n“);scanf(“%s“,num);flag=0;v=l-next;while(v) /*查询该 Number 是否存在,flag=1 表示该

28、Number 存在*/if(strcmp(v-data.num,s)=0) flag=1;break;v=v-next;if(flag=1)break; /*若 Number 存在,则进行插入之前的新记录的输入操作*/else getchar();printf(“n=Number %s no record,try again?(y/n):“,s);scanf(“%c“,if(ch=y|ch=Y)continue;elsereturn;/*以下新记录的输入操作与 Add()相同*/printf(“please input the Number you want yo add:n“);scanf(

29、“%s“,num);v=l-next;while(v)if(strcmp(v-data.num,num)=0)printf(“=sorry,new Number:%s!existing alreadyn“,num);printheader();printdata(v);printf(“n“);getchar();18return;v=v-next;newinfo=(Node *)malloc(sizeof(Node);if(!newinfo)printf(“n Failed to allocate resources “); /*如没有申请到,打印提示信息*/return ; /*返回主界面*

30、/strcpy(newinfo-data.num,num);printf(“please input the Name:n“);scanf(“%s“,newinfo-data.name);printf(“please input the C score0-100:n“);scanf(“%s“,newinfo-data.cgrade);printf(“please input the Math score0-100:n“);scanf(“%s“,newinfo-data.mgrade);printf(“please input the English score0-100:n“);scanf(“

31、%s“,newinfo-data.egrade);newinfo-data.total=newinfo-data.egrade+newinfo-data.cgrade+newinfo-data.mgrade;newinfo-data.ave=(float)(newinfo-data.total/3);newinfo-next=NULL;shoudsave=1; /*在 main()有对该全局变量的判断,若为 1,则进行存盘操作*/*将指针赋值给 p,因为 l 中的头节点的下一个节点才实际保存着学生的记录*/p=l-next;while(1)if(strcmp(p-data.num,s)=0)

32、/*在链表中插入一个节点*/newinfo-next=p-next;p-next=newinfo;break;p=p-next;Disp(l);printf(“nn“);getchar();统计函数void Tongji(Link l)19Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */Node *r=l-next;int num1=0,num2=0,num3=0,num4=0,num5=0;int select;if(!r)printf(“n=no record!n“);return ;system(“cls“);pm=pe=pc=pt=pa=r;pri

33、ntf(“select the subject you want to count:1.C 2.Math 3.Englishn“);scanf(“%d“,switch(select)case 1:printf(“select the band:1.0-60 2.60-70 3.70-80 4.80-90 5.90-100n“);scanf(“%d“,switch(select)case 1:while(r!=NULL)if(r-data.cgradenext;printf(“there are %d studentsn“,num1);break;case 2:while(r!=NULL)if(

34、r-data.cgrade=60printf(“there are %d studentsn“,num1);20break;case 3:while(r!=NULL)if(r-data.cgrade=70printf(“there are %d studentsn“,num1);break;case 4:while(r!=NULL)if(r-data.cgrade=80printf(“there are %d studentsn“,num1);break; case 5:while(r!=NULL)if(r-data.cgrade=90printf(“there are %d students

35、n“,num1);break;break;case 2:printf(“select the band:1.0-60 2.60-70 3.70-80 4.80-90 5.90-100n“);scanf(“%d“,switch(select)case 1:while(r!=NULL)21if(r-data.mgradenext;printf(“there are %d studentsn“,num1);break;case 2:while(r!=NULL)if(r-data.mgrade=60printf(“there are %d studentsn“,num1);break;case 3:w

36、hile(r!=NULL)if(r-data.mgrade=70printf(“there are %d studentsn“,num1);break;case 4:while(r!=NULL)if(r-data.mgrade=80printf(“there are %d studentsn“,num1);22break; case 5:while(r!=NULL)if(r-data.mgrade=90printf(“there are %d studentsn“,num1);break;break;case 3:printf(“select the band:1.0-60 2.60-70 3

37、.70-80 4.80-90 5.90-100n“);scanf(“%d“,switch(select)case 1:while(r!=NULL)if(r-data.egradenext;printf(“there are %d studentsn“,num1);break;case 2:while(r!=NULL)if(r-data.egrade=60printf(“there are %d studentsn“,num1);break;case 3:while(r!=NULL)23if(r-data.egrade=70printf(“there are %d studentsn“,num1

38、);break;case 4:while(r!=NULL)if(r-data.egrade=80printf(“there are %d studentsn“,num1);break; case 5:while(r!=NULL)if(r-data.egrade=90printf(“there are %d studentsn“,num1);break;break;getchar();排序函数void Sort(Link l)int cho;printf(“please select the subject you want to sortn“);printf(“1.sort by Cn“);2

39、4printf(“2.sort by Mathn“);printf(“3.sort by Englishn“);printf(“4.sort by Totaln“);printf(“5.sort by Averagen“);scanf(“%d“,switch(cho)case 1:Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node); /* 用于做新的连表 */ll-next=NULL;if(l-next=NULL)printf(“n=no record!n“);return ;p=l-next;while(p)s=(Node*)malloc(

40、sizeof(Node); /* 新建接点用于保存信息 */s-data=p-data;s-next=NULL;rr=ll;while(rr-next!=NULL if(rr-next=NULL)rr-next=s;elses-next=rr-next;rr-next=s;p=p-next;free(l);l-next=ll-next;system(“cls“);printf(“n=sort done!n“);Disp(l);getchar();break;case 2:Link ll;Node *p,*rr,*s;25ll=(Link)malloc(sizeof(Node); /* 用于做新

41、的连表 */ll-next=NULL;if(l-next=NULL)printf(“n=no record!n“);return ;p=l-next;while(p)s=(Node*)malloc(sizeof(Node); /* 新建接点用于保存信息 */s-data=p-data;s-next=NULL;rr=ll;while(rr-next!=NULL if(rr-next=NULL)rr-next=s;elses-next=rr-next;rr-next=s;p=p-next;free(l);l-next=ll-next;system(“cls“);printf(“n=sort don

42、e!n“);Disp(l);getchar();break;case 3 :Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node); /* 用于做新的连表 */ll-next=NULL;if(l-next=NULL)printf(“n=no record!n“);return ;p=l-next;while(p)26s=(Node*)malloc(sizeof(Node); /* 新建接点用于保存信息 */s-data=p-data;s-next=NULL;rr=ll;while(rr-next!=NULL if(rr-next=NULL)rr-

43、next=s;elses-next=rr-next;rr-next=s;p=p-next;free(l);l-next=ll-next;system(“cls“);printf(“n=sort done!n“);Disp(l);getchar();break;case 4:Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node); /* 用于做新的连表 */ll-next=NULL;if(l-next=NULL)printf(“n=no record!n“);return ;p=l-next;while(p)s=(Node*)malloc(size

44、of(Node); /* 新建接点用于保存信息 */s-data=p-data;s-next=NULL;rr=ll;while(rr-next!=NULL if(rr-next=NULL)rr-next=s;else27s-next=rr-next;rr-next=s;p=p-next;free(l);l-next=ll-next;system(“cls“);printf(“n=sort done!n“);Disp(l);getchar();break;case 5:Link ll;Node *p,*rr,*s;ll=(Link)malloc(sizeof(Node); /* 用于做新的连表

45、*/ll-next=NULL;if(l-next=NULL)printf(“n=no record!n“);return ;p=l-next;while(p)s=(Node*)malloc(sizeof(Node); /* 新建接点用于保存信息 */s-data=p-data;s-next=NULL;rr=ll;while(rr-next!=NULL if(rr-next=NULL)rr-next=s;elses-next=rr-next;rr-next=s;p=p-next;free(l);l-next=ll-next;system(“cls“);printf(“n=sort done!n“

46、);Disp(l);28getchar();break;存储函数void Save(Link l)FILE* fp;Node *p;int count=0;fp=fopen(“c:student“,“wb“);/*以只写方式打开二进制文件*/if(fp=NULL) /*打开文件失败*/printf(“n=fail to Open file!n“);getchar();return ;p=l-next;while(p)if(fwrite(p,sizeof(Node),1,fp)=1)/*每次写一条记录或一个节点信息至文件*/p=p-next;count+;elsebreak;if(count0)getchar();printf(“nnnnn=save done

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报