《c语言课程设计学生成绩管理系统报告书.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生成绩管理系统报告书.docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1C 程序设计)设计报告书学生成绩管理系统学 生 姓 名学号班级成绩计算机科学与技术专业计算机科学与技术专业20152015 年年0101 月月6 6 日日2摘摘要要本系统主要用于学生成绩管理与查询,主要功能包括数据的录入、读取、显示、删除、插入、查找、修改、排名。主要使用人群:龙岩学院信息工程院全体学生。3目目 录录1 课题综述 X1.1 课题内容 X1.2 意义 X1.3 设计目的 X2 系统分析 X2.1 相关基础知识 X2.2 总体方案 X3 系统设计 X3.1 新建文件 X3.2 打开文件 X3.3 修改功能 X3.4 插入功能 X3.5 查询功能 X3.6 删除功能 X3.7 排名
2、功能 X3.8 关于我们 X3.9 软件说明 X3.10 退出保存 X4 代码编写 X4.1 总程序 X5 总结 X参考文献 X11 1 课题综述课题综述1.1 课题内容课题内容每个学生的信息为:学号、姓名、性别、课程单科成绩(单科成绩包括 C 语言、高数、大学语文、汇编、中近史)、总分、平均成绩。功能:(1)按学号顺序输入学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括 C语言、高数、大学语文、汇编、中近史),并存入文件中。(2)从文件读取数据(3)删除学生信息(4)查询学生信息(查询可分为精确查询和模糊查询)(5)修改学生信息(要求修改后,数据依然是按学号顺序排列)(6)插入学生
3、信息(要求插入后,数据依然是按学号顺序排列)(7)附加功能,学生可自由发挥,如:排名、求各门课程平均分等。1.2意义意义通过该课程设计,为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。把现实世界中的实际问题在计算机内并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。同时将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,对 C 系统编程有一个大致的了解。1.3 设计目的设计目的1、掌握和巩固 C 语言编写的相关知识和技巧,特别是函数、指针、结构体。2、能够采用模块化思想调试程序。3、通过该课程设计的
4、操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。22 2、系统分析、系统分析2.1相关基础知识相关基础知识选择、循环、函数、指针、结构体、链表2.2 总体总体方案方案架构图:架构图:方案描述:方案描述:菜单:运用菜单:运用 switchswitch casecase 选择功能,在每个选择功能,在每个 casecase 中有相对应的调用语句,调用相对应的函中有相对应的调用语句,调用相对应的函数。数。删除功能:调用删除函数,判断是否保存,如果保存写入文件。删除功能:调用删除函数,
5、判断是否保存,如果保存写入文件。插入功能:运用链表插入。插入功能:运用链表插入。修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。查询功能:调用菜单中的查询函数,用循环实现查询功能。查询功能:调用菜单中的查询函数,用循环实现查询功能。排名功能:调用菜单中的排名函数,通过冒泡排序法实现功能。排名功能:调用菜单中的排名函数,通过冒泡排序法实现功能。保存功能:运用写入文件。保存功能:运用写入文件。33.系统设计系统设计定义一个 student 类型的结构体,里面包含学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩
6、包括 C 语言、高数、大学语文、汇编、中近史)、总分、平均成绩。3.1 新建功能新建功能从键盘输入 N 个学生基本信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括C 语言、高数、大学语文、汇编、中近史),编程根据输入信息计算各学生总分和平均分。创建动态链表,将学生信息存入链表中。在 DOS 屏幕上打印链表内所有学生信息。新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。3.2 打开功能打开功能打开一个文件,从文件中读取学生信息,并新建链表,将数据存入动态链表。在 DOS 屏幕上打印链表内所有学生信息。3.3 修改功能修改功能在 DOS 屏幕上打印出当前的所有学生信息。输入待
7、修改的学生学号,若不存在,输出“查无此人”;若存在,则输入修改的信息,并存回学生信息链表中,存回后学生信息链表依然是按学号顺序排列。最后在 DOS 屏幕上打印出新的所有学生信息。3.4 插入功能插入功能在 DOS 屏幕上打印出当前的所有学生信息。输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息,包括学号、姓名、性别、课程单科成绩(单科成绩包括 C 语言、高数、大学语文、汇编、中近史),根据输入信息计算各学生总分和平均分。若输入的学生学号已经存在,则输出“该学号已存在,无法操作!”,否则将学生信息插入到链表中,插入后链表中的数据依然按照学号排列。最后在 DOS 屏幕上打印出新的所
8、有学生信息。3.5 查询功能查询功能查询分为:精确查询、模糊查询精确查询:(1)按姓名查询输入待查询的姓名;根据顺序查询的方法,对学生的姓名依次查询,直到查询到与输入的信息相匹配的信息,4并在 DOS 屏幕上显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。(2 2)按学号查询输入待查询的学号;根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在 DOS 屏幕显示出来。若需要查询的信息不存在,系统则会提示找不到此人。可重复查询。模糊查询:(1)按姓氏查询输入待查询的姓氏;根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,
9、则在DOS 屏幕显示出来,直到链表结束。若需要查询的信息不存在,系统则会提示找不到相关信息。可重复查询。(2)按性别查询输入待查询的性别;根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在 DOS 屏幕显示出来,直到链表结束。可重复查询。3.63.6 删除功能删除功能在 DOS 屏幕上打印出当前的所有学生信息。(1)按姓名删除输入需要删除的学生姓名;根据顺序查询的方法,对学生的姓名依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在 DOS 屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。(2)按学号删除输入需要删除的学生学号
10、;根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹配的信息,则删除该生信息,并在 DOS 屏幕显示出新的所有学生信息。若需要删除的信息不存在,系统则会提示删除失败。53.73.7 排名功能排名功能可根据学生的总分进行排名,并在 DOS 屏幕上输出排名结果。3.83.8 关于我们在 DOS 屏幕上输出系统相关信息。3.93.9 软件说明软件说明3.103.10 退出保存选择0退出系统,保存功能在每段函数结束后实现。3.10 运行结果(示例)(示例)3.10.03.10.0 主界面主界面3.10.13.10.1 新建文件(输入一组数据,存入文件中)新建文件(输入一组数据,存入文件
11、中)63.10.23.10.2打开文件(打开文件,读取文件数据存入链表)打开文件(打开文件,读取文件数据存入链表)73.10.33.10.3修改功能修改功能3.10.43.10.4插入功能插入功能83.10.53.10.5查询功能查询功能9精确查询精确查询-按姓名查询按姓名查询精确查询精确查询-按学号查询按学号查询模糊查询模糊查询-按姓氏查询按姓氏查询10模糊查询模糊查询-按性别查询按性别查询3.10.63.10.6删除功能删除功能按姓名删除按姓名删除11按学号删除按学号删除3.10.73.10.7总分总分排名功能排名功能123.10.93.10.9软件说明软件说明3.10.103.10.10
12、退出保存退出保存保存功能在每段函数结束后实现。保存功能在每段函数结束后实现。134 代码编写代码编写#include#include#include/*-*/#define LEN sizeof(struct student)/结构体长度/*-*/#defineNEW(struct student*)malloc(LEN)/*-*/FILE*fp;/*文件指针*/*-*/struct studentint num;char name20;int score1,score2,score3,score4,score5;char sex;double aver;float sum;struct st
13、udent*next;char filename100;struct student*creat()struct student*h;struct student*p,*q;printf(需要输入几条信息:);int i,n;scanf(%d,&n);printf(n-请按学号顺序依次输入学生信息-n);char c=getchar();h=NULL;for(i=1;i=n;i+)p=NEW;14if(p=NULL)printf(Allocation failuren);exit(0);printf(n);printf(输入姓名:);gets(p-name);printf(输入学号:);sca
14、nf(%d,&p-num);c=getchar();printf(输入性别:);scanf(%c,&p-sex);printf(输入 c 语言成绩:);scanf(%d,&p-score1);printf(输入高数成绩:);scanf(%d,&p-score2);printf(输入大学语文成绩:);scanf(%d,&p-score3);printf(输入汇编语言成绩:);scanf(%d,&p-score4);printf(输入中近史成绩:);scanf(%d,&p-score5);c=getchar();p-sum=p-score1+p-score2+p-score3+p-score4+p
15、-score5;p-aver=(p-score1+p-score2+p-score3+p-score4+p-score5)/5.0;p-next=NULL;if(h=NULL)/*h 为空,表示新结点为第一个结点*/h=p;/*头指针指向第一个结点*/else/*h 不为空*/q-next=p;/*新结点与尾结点相连接*/q=p;/*使 q 指向新的尾结点*/return h;struct student*paixu(struct student*head)/*总分排名*/15system(cls);printf(总分排名如下:n);struct student*op;struct stude
16、nt*p;struct student*p1,*p2;p1=(struct student*)malloc(LEN);p1-next=head;head=p1;for(op=NULL;op!=head;op=p)for(p=p1=head;p1-next-next!=op;p1=p1-next)if(p1-next-sum next-next-sum)p2=p1-next-next;p1-next-next=p2-next;p2-next=p1-next;p1-next=p2;p=p1-next-next;p1=head;head=head-next;free(p1);p1=NULL;retu
17、rn head;void prlist(struct student*head)/*输出函数*/struct student*p;p=head;printf(n 学号姓名性别c 语言高数大学语文汇编语言中近史总分平均分n);16while(p!=NULL)printf(%d%s%c%d%d%d%d%d%.1f%.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);p=p-next;system(pause);/*-write将数据存入文件-*/void write(struct st
18、udent*head)struct student*p;p=head;if(head!=NULL)while(p!=NULL)fwrite(p,LEN,1,fp);p=p-next;printf(文件更新成功!n);fclose(fp);system(pause);system(cls);/*-read 将 文 件 数 据 读 入 一 个 新 链 表 中-*/struct student*read(void)struct student*head;struct student*p1,*p2;head=NULL;p1=NEW;17rewind(fp);/指向文件头fread(p1,LEN,1,f
19、p);while(!feof(fp)if(head=NULL)head=p1;elsep2-next=p1;p2=p1;p1=NEW;fread(p1,LEN,1,fp);p2-next=NULL;fclose(fp);return(head);void find(struct student*head)/*查询功能*/int t,s,i,j;struct student*p,*q;char x10,y2=0,c2;char k,f;p=head;printf(精确查找:n*1 按姓名查找n*2 按学号查找n 模糊查找n*3 按姓氏查找:n*4 按性别查找n);scanf(%d,&s);k=g
20、etchar();if(s=1)printf(请输入姓名:);gets(x);while(p!=NULL)if(strcmp(x,p-name)=0)printf(n 学号姓名性别c 语言高数大学语文汇编语言中近史总分平均分n);printf(%d%s%c%d%d%d%d%d18%.1f%.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next;else if(s=2)printf(按学号查找:n);scanf(%d,&t);while
21、(p!=NULL)if(t=p-num)printf(n 学号姓名性别c 语言高数大学语文汇编语言中近史总分平均分n);printf(%d%s%c%d%d%d%d%d%.1f%.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next;else if(s=3)printf(按姓氏查询:n);gets(c);while(p!=NULL)if(strncmp(c,p-name,1)=0)printf(n 学号姓名性别c 语言高数大学语文汇编语
22、言中近史总分平均分n);printf(%d%s%c%d%d%d%d%d%.1f%.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);19j=1;else i=1;q=p;p=p-next;else if(s=4)printf(按性别查询:n);f=getchar();while(p!=NULL)if(f=p-sex)printf(n 学号姓名性别c 语言高数大学语文汇编语言中近史总分平均分n);printf(%d%s%c%d%d%d%d%d%.1f%.2fn,p-num,p-nam
23、e,p-sex,p-score1,p-score2,p-score3,p-score4,p-score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next;if(i=1&j!=1)printf(Not found.输入错误n);system(pause);system(cls);struct student*delstudent(struct student*head)/*删除功能*/int s,n,m=1;char c;struct student*p,*q;char x10;while(m)printf(*1 按学号删除n*2 按姓名删除n);scanf(%d
24、,&s);c=getchar();printf(已有信息如下:n);20prlist(head);if(head=NULL)printf(This is a empty list.);returnhead;p=head;switch(s)case 2:printf(请输入姓名:);gets(x);while(strcmp(x,p-name)!=0&p-next!=NULL)q=p;p=p-next;if(strcmp(x,p-name)=0)if(p=head)head=p-next;elseq-next=p-next;free(p);elseprintf(Not found.n);conti
25、nue;m=0;break;case 1:printf(请输入学号:);scanf(%d,&n);c=getchar();while(n!=p-num&p-next!=NULL)q=p;p=p-next;if(n=p-num)if(p=head)head=p-next;elseq-next=p-next;free(p);elseprintf(Not found.n);continue;21;m=0;break;default:printf(输入错误n);break;returnhead;void about()/*关于我们*/system(cls);printf(,_ nn);printf(.
26、)()nn);printf(/Hinn);printf(成员介绍nn);printf(1.组长:nn);printf(2.组员:nn);printf(3.组员:nn);printf(4.组员:nn);printf(产品信息nn);printf(一.产品用途:主要用于学生成绩管理与查询.nn);printf(二.班级成绩管理系统主要包括:数据的录入 nn);printf(读取显示删除 插入 查找 修改 排名.nn);system(pause);system(cls);void end()/*退出系统*/char s;printf(是否退出系统 Y/N?n);scanf(%c,&s);if(s=Y
27、|s=y)22exit(0);else if(s=N|s=n)return;elseprintf(输入错误,请重新输入nn);system(pause);return;struct student*insert(struct student*head,struct student*op)/*插入功能*/struct student*p,*q;if(head=NULL)head=op;/*空表时,插入结点*/op-next=NULL;else p=head;while(op-num p-num&p-next!=NULL)q=p;p=q-next;if(op-num=p-num)printf(n
28、该学号已存在,无法插入!n);return head;else if(op-numnum)if(p=head)head=op;/*在表头插入结点*/elseq-next=op;/*在表中间插入结点*/op-next=p;else p-next=op;/*在表尾插入结点*/op-next=NULL;returnhead;struct student*xiugai(struct student*head)/*修改功能*/23struct student*op=NEW;int c;head=delstudent(head);printf(请输入新名字:);gets(op-name);printf(请
29、输入新学号:);scanf(%d,&op-num);c=getchar();printf(请输入新性别:);scanf(%c,&op-sex);printf(请输入新 C 语言成绩:);scanf(%d,&op-score1);printf(请输入新高数成绩:);scanf(%d,&op-score2);printf(请输入新大学语文成绩:);scanf(%d,&op-score3);printf(请输入新汇编成绩:);scanf(%d,&op-score4);printf(请输入新中近史成绩:);scanf(%d,&op-score5);c=getchar();op-sum=op-score
30、1+op-score2+op-score3+op-score4+op-score5;op-aver=(op-score1+op-score2+op-score3+op-score4+op-score5)/5.0;op-next=NULL;head=insert(head,op);return head;struct student*ca(struct student*head)/*插入功能*/struct student*op=NEW;char c;printf(请输入名字:);gets(op-name);printf(请输入学号:);scanf(%d,&op-num);c=getchar()
31、;24printf(请输入性别:);scanf(%c,&op-sex);printf(请输入 C 语言成绩:);scanf(%d,&op-score1);printf(请输入高数成绩:);scanf(%d,&op-score2);printf(请输入大学语文成绩:);scanf(%d,&op-score3);printf(请输入汇编成绩:);scanf(%d,&op-score4);printf(请输入中近史成绩:);scanf(%d,&op-score5);c=getchar();op-next=NULL;head=insert(head,op);op-sum=op-score1+op-sc
32、ore2+op-score3+op-score4+op-score5;op-aver=(op-score1+op-score2+op-score3+op-score4+op-score5)/5.0;return head;void help()/*软件说明*/system(cls);printf(n说明nnn);printf(运行本软件需先使用新建文件或打开文件功能,否则运行出错。n);printf(每次使用修改插入删除等功能后需重新打开文件读取数据,n);printf(否则得到的数据是未保存的。每运行完一个功能会自动返回到n);printf(主界面。nnn);printf(nn纯属原创 禁止
33、抄袭nn);system(pause);system(cls);/*-主函数 菜单-*/25int main()system(color 9f);char c,r;struct student*head;int z;while(1)printf(n);printf(-nn);printf(欢迎使用学生成绩管理系统nn);printf(-nn);printf(*菜单*nn);printf(=nn);printf(*1.新建文件*2.打开文件*);printf(nn);printf(*3.修改功能*4.插入功能*);printf(nn);printf(*5.查询功能*6.删除功能*);printf
34、(nn);printf(*7.排名功能*8.关于我们*);printf(nn);printf(*9.软件说明*0.退出系统*);printf(nn);printf(请输入指令:);scanf(%d,&z);c=getchar();switch(z)case 1:printf(请输入文件路径和新建文件名(如:d:/123):);scanf(%s,filename);/-输入文件名,如 d:/123if(fp=fopen(filename,w+)=NULL)/W+先新建文件在写入数据26printf(新建文件失败!n);elseprintf(新建文件成功!n);head=creat();write
35、(head);break;case 2:printf(nn 读取文件数据n);printf(请输入读取的文件路径和文件名(如:d:/123):);scanf(%s,filename);/*-输入文件名,如 d:/123-*/c=getchar();if(fp=fopen(filename,r+)=NULL)/r+读文件printf(打开文件失败n);elseprintf(打开文件成功n);head=read();system(pause);printf(信息如下:n);prlist(head);system(cls);break;case 3:head=xiugai(head);prlist(
36、head);printf(是否保存 Y/N?n);scanf(%c,&r);if(r=y|r=Y)fp=fopen(filename,w+);write(head);else printf(未保存n);system(pause);system(cls);break;case 4:head=ca(head);prlist(head);printf(是否保存 Y/N?);scanf(%c,&r);if(r=y|r=Y)fp=fopen(filename,w+);write(head);break;case 5:find(head);break;case6:head=delstudent(head)
37、;prlist(head);printf(是 否 保 存27Y/N?n);scanf(%c,&r);if(r=y|r=Y)fp=fopen(filename,w+);write(head);elseprintf(未保存n);system(pause);system(cls);break;case 7:head=paixu(head);prlist(head);system(cls);break;case 8:about();break;case 9:help();break;case 0:end();break;default:printf(输入错误,请重新输入n);break;return 0;5 总结总结通过这次实验我们更好的掌握和巩固 C 语言编写的相关知识和技巧,特别是函数、指针、结构体、链表等功能。通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能,虽然在设计过程中遇到了不少问题麻烦,但在组长组员们的努力钻研,和教材数据的帮助下,完成了这次程序设计。参考文献参考文献