




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、淮北师范大学程序设计课程设计学 生 管 理 系 统 学生成绩管理系统学 院 计算机科学与技术 专 业 计算机科学与技术(师范) 学 号 * 学 生 姓 名 * * * 指导教师姓名 * * * 2010年12月 28 日一、设计目的与内容(1)实验目的l 进一步巩固和复习C程序设计的基础知识。l 培养学生结构化程序、模块化程序设计的方法和能力。l 提高学生调试程序的技巧和软件设计的能力。l 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。l 了解软件的编制过程。(2)实验内容1) 实现对学生信息的查找、添加、删除、修改、浏览、保存、从文件读取功能。2) 使用结构体对学生信息的存
2、储。3) 使用链表实现对学生信息的查找、添加、删除、修改、浏览等操作。4) 使用文件完成数据的存储与读取,要求每次运行某个模块时将数据读入结构体中,并 提供保存选项,将结构体中的数据保存在文件中。二、算法的基本思想(1)数据结构 学生成绩信息:typedef struct studentscore char name10; /定义姓名的字符数组 char num20; /定义学号的字符数组struct subjectchar subname20;/定义学科名的字符数组float score; /保存学生各科成绩sub5; /共五门课 double sum; /总分struct students
3、core *next;STUCORE;(2)本系统涉及的知识点结构体、数组、循环、函数、指针、链表、文件操作。(3)功能要求功能模块1、建立学生信息,每个学生的信息包括:学号、姓名、性别、班级、学院2、用链表的形式对学生信息分别进行查找、添加、删除、修改3、结果保存在磁盘上(4)功能模块学生管理系统1.文件操作2.学生基本信息管理3.学生成绩信息管理4.退出文件操作1.从文件中读取信息2.学生信息存入文件3.返回学生成绩信息管理1. 查找成绩信息2. 添加成绩信息3. 删除成绩信息4. 修改成绩信息5. 返回修改成绩信息删除成绩信息添加成绩信息查找成绩信息1.按学号查找2.按姓名查找3.返回学
4、生信息存入文件1保存学生基本信息2保存学生成绩信息从文件中读取信息1读取学生基本信息2读取学生成绩信息(4)算法功能描述总体功能说明:本系统可以做到对1.学生信息:学号、姓名、性别、学院、班级。2.学生成绩信息:学号、姓名、一名学生五门不同学科的学科名及该科成绩。分别进行添加、修改、查找、删除、保存、载入功能。学生成绩信息管理功能说明:可以添加学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。并可以通过对输入的学生成绩信息进行修改、删除、保存、载入功能并通过学号和姓名两种方式查找,并且对同名的学生也可以进行区分。并且会保持学好的一致性,保证任意两名学生不会出现学号相重复的情况。三、主
5、要功能模块流程图(按姓名查找信息的流程图)StartScanf(“%s”,no) if(strcmp(p-name,no)=0) while(p!=NULL) 0 1Printf(“查无此人”) Printf(“所有信息”) END 按姓名查找流程图四、 系统测试1.主程序界面首先进入1.文件管理操作。建立单链表。2.文件管理操作选择读取的文件(第一次运行时因文件未建立只有在读取文件后才能执行保存文件)读入文件后就可选择进入的系统。选择2进入学生基本信息管理系统;选择3进入学生成绩信息管理系统。3.学生成绩信息管理选择1:查询成绩信息。选择2:添加成绩信息。选择3:删除成绩信息。选择4:修改成
6、绩信息。选择5:返回。A. 查询成绩信息选择1:按学号查询成绩信息。选择2:按姓名查询成绩信息。可以查找到同名学生的信息。B. 添加成绩信息如图添加学生成绩信息。继续添加输入y否则输入n。添加完成后请去往文件管理保存!C. 删除成绩信息如图删除学生基本信息。继续删除其它学生输入y否则输入n。删除完成后请去往文件管理保存!D. 修改成绩信息如图修改学生基本信息。继续修改其它学生输入y否则输入n。修改完成后请去往文件管理保存!五、 结论通过这次课程设计,我感觉到要真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到 一个问题,想办法去解决,最后终于找到方法时,心里的那份喜悦之情真
7、是难以形容。编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查。直到最终搞清为止。我对于链表也有了更深层次的理解,尤其是采用动态内存分配malloc函数的使用。但我的程序仍让不够完美,因为我修改信息时还不能对学号进行判断,就是说如果修改时使两个学生学号相同就一并保存下来。在查询中可以一并查询出来,但删除修改操作需要按录入顺序捉个操作。这是该程序的不足。而且,在姓名查找中必不能实现模糊查找功能。也就是说,不能对某同学姓名中的一部分进行判断进而进行查找。这次课程设计能够顺利完成要首先感谢韩玲老师对我的悉心教导,她在我整个编程中给予了我很大帮助。
8、还感谢王保华老师为我解释了查询中链表的循环,陈美荣老师为我讲解了动态内存分配malloc函数。在此我要感谢所有为我的课程设计付出心血的老师们!参考文献:谭浩强,C程序设计(第二版),清华大学出版社。严蔚敏,吴伟民,数据结构(C语言版),清华大学出版社。六、 源程序及系统文件使用说明学生成绩信息管理中各模块的功能说明程序代码设计一:结构体:typedef struct studentscore char name10; char num20;struct subjectchar subname20;float score; sub5; /保存学生各科成绩double sum; /总分struct
9、 studentscore *next;STUCORE;二:添加学生成绩信息函数:(void add_score())1)函数原形:void add_score()2)功 能:采用动态内存分配malloc函数和链表结构。利用do while、while循环结构strcpy函数依次输入学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。将信息保存在内存中建立的链表里。3)变量及类型: STUCORE *stu,*p; 定义结构体指针 char k; 用来接收输入的(y/n)以便通过do while判断是否继续添加信息int flag; 定义一个整型变量来判断所添加的学生学号是否已经存在文
10、件中,保证学号唯一性 p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(cls)执行清屏操作。添加完成后需要去往文件操作保存。void add_score()/添加学生成绩信息STUCORE *stu,*p;char k;p=head_2; int flag=0; dostu=( STUCORE *) malloc(sizeof(STUCORE);printf(输入学生的成绩信息
11、:n);while(flag=0)printf(请输入学生学号:);scanf(%s,no);flag=Judge(no);strcpy(stu-num,no);printf(请输入学生姓名:);scanf(%s,stu-name); printf(请输入第一门课学科名:);scanf(%s,stu-sub0.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub0.score);printf(请输入第二门课学科名:);scanf(%s,stu-sub1.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub1.score);pr
12、intf(请输入第三门课学科名:);scanf(%s,stu-sub2.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub2.score);printf(请输入第四门课学科名:);scanf(%s,stu-sub3.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub3.score);printf(请输入第五门课学科名:);scanf(%s,stu-sub4.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub4.score);stu-sum=stu-sub1.score+stu-sub2.
13、score+stu-sub3.score+stu-sub4.score+stu-sub0.score;getchar();printf(tt输入学生信息完成。n);while(p-next!=NULL)p=p-next;p-next=stu;p=stu;p-next=NULL;printf(n添加完成后请去往文件管理保存!nn是否继续添加学生信息?(y/n):n); while(k=getchar()=y);getchar(); system(cls);三:删除学生成绩信息函数(void del_score())1)函数原形:void del_score()2)功 能:利用strcmp函数、d
14、o while、while循环结构通过学号找到要删除的学生并利用链表执行删除操作。将信息保存在内存中建立的链表里。3)变量及类型: STUCORE *p,*q; 定义结构体指针 char no10; 定义输入的待比较变量 char k,ch; 用来接收输入的(y/n)以便通过do while判断是否删除信息p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完删除函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(cls)执行清屏操作。删
15、除完成后需要去往文件操作保存。void del_score()/删除学生成绩信息 STUCORE *p,*q;char no10;char k,ch; Do p=head_2;printf(tt删除学生的详细资料 nnn); printf(请输入要删除学生的学号:);scanf(%s,no); while(strcmp(p-num,no)!=0&p-next!=NULL) q=p; p=p-next; if(strcmp(p-num),no)=0)printf(要删除的学生成绩信息:);printf(学号:%sn,p-num);printf(姓名:%sn,p-name);printf(%s 成
16、绩: %fn,p-sub0.subname,p-sub0.score);printf(%s 成绩: %fn,p-sub1.subname,p-sub1.score);printf(%s 成绩: %fn,p-sub2.subname,p-sub2.score);printf(%s 成绩: %fn,p-sub3.subname,p-sub3.score);printf(%s 成绩: %fn,p-sub4.subname,p-sub4.score);printf(总分:%lfn,p-sum);getchar();printf(n确定删除吗?y/n?nn);ch=getchar();if(ch=y)q
17、-next=p-next;printf(nttt已删除该学生nn);else printf(nttt没有该学生nn);getchar(); printf(n删除完成后请去往文件管理保存!nn是否继续删除其它学生信息?(y/n?):n);k=getchar();while(k=y);getchar();system(cls);四:修改学生成绩信息函数(void modify_score())1)函数原形:void modify_score()2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要修改的学生并利用链表执行修改操作。并将修改后的信息保存在内存中建立的链表
18、里。3)变量及类型: STUCORE *p; 定义结构体指针 char no10; 定义输入的待比较变量 char k; 用来接收输入的(y/n)以便通过do while判断是否继续修改信息p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完修改函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(cls)执行清屏操作。修改完成后需要去往文件操作保存。void modify_score()/修改学生成绩信息system(cls);STUC
19、ORE *p;char no30;char k;dop=head_2;printf(tt修改学生的详细资料n);printf(输入学生学号:);scanf(%s,no);while(strcmp(p-num,no)!=0&p-next!=NULL) p=p-next;if(strcmp(p-num),no)=0)printf(要修改的学生的详细资料:n);printf(学号:%sn,p-num);printf(姓名:%sn,p-name);printf(%s 成绩: %fn,p-sub0.subname,p-sub0.score);printf(%s 成绩: %fn,p-sub1.subnam
20、e,p-sub1.score);printf(%s 成绩: %fn,p-sub2.subname,p-sub2.score);printf(%s 成绩: %fn,p-sub3.subname,p-sub3.score);printf(%s 成绩: %fn,p-sub4.subname,p-sub4.score);printf(总分:%lfn,p-sum);printf(ntt*根据提示输入修改后的信息*nn); printf(输入新的学生的成绩信息:n);printf(请输入新的学生学号:);scanf(%s,p-num);printf(请输入新的学生姓名:);scanf(%s,p-name)
21、;printf(请输入第一门课学科名:);scanf(%s,stu-sub0.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub0.score);printf(请输入第二门课学科名:);scanf(%s,stu-sub1.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub1.score);printf(请输入第三门课学科名:);scanf(%s,stu-sub2.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub2.score);printf(请输入第四门课学科名:);scanf(%s,
22、stu-sub3.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub3.score);printf(请输入第五门课学科名:);scanf(%s,stu-sub4.subname);printf(请输入该课成绩:);scanf(%f,&stu-sub4.score);stu-sum=stu-sub1.score+stu-sub2.score+stu-sub3.score+stu-sub4.score+stu-sub0.score;else printf(tt没有此学生信息!nn);getchar();printf(n修改完成后请去往文件管理保存!nn是否继修改
23、学生信息?(y/n):n);k=getchar();while(k=y);getchar();system(cls);五:按学号查找学生成绩信息函数(void search_num())1)函数原形:void search_num()2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要查找的学生并将该学生成绩信息显示出来。3)变量及类型: STUCORE *p; 定义结构体指针 char no10; 定义输入的待比较变量 char k;用来接收输入的(y/n)以便通过do while判断是否继续利用学号查询信息int flag; 定义一个整型变量来判断所查找的学
24、生是否存在文件中p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(cls)执行清屏操作。void search_num()/按学号查找学生成绩信息STUCORE *p;char no10;char k;int flag;dop=head_2;flag=0;printf(请输入要查找学生的学号:);scanf(%s,no);while(p!=NULL)if (strcmp(p-nu
25、m,no)=0)printf(要查询的学生详细资料:n);printf(学号:%sn,p-num);printf(姓名:%sn,p-name);printf(%s 成绩: %fn,p-sub0.subname,p-sub0.score);printf(%s 成绩: %fn,p-sub1.subname,p-sub1.score);printf(%s 成绩: %fn,p-sub2.subname,p-sub2.score);printf(%s 成绩: %fn,p-sub3.subname,p-sub3.score);printf(%s 成绩: %fn,p-sub4.subname,p-sub4.
26、score);printf(总分:%lfn,p-sum);p=p-next;flag=1;else p=p-next;if(flag=0) printf(nttt没有该学生nn);getchar();printf(n是否继续查找其它学生信息?y/n?n);k=getchar();while(k=y);getchar();printf(ntt查看完毕!按任意键返回);getchar();system(cls);六:按姓名查找学生成绩函数(void search_name ())1)函数原形:void search_name()2)功 能:利用strcmp函数、do while、while循环结构
27、通过姓名找到要查找的学生并将该学生成绩信息显示出来。(包括同名的学生)3)变量及类型: STUCORE *p; 定义结构体指针 char no10; 定义输入的待比较变量 char k;用来接收输入的(y/n)以便通过do while判断是否继续利用姓名查询信息int flag; 定义一个整型变量来判断所查找的学生是否存在文件中p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system(c
28、ls)执行清屏操作。void search_name()/按姓名查找学生成绩STUCORE *p;char no10;char k;int flag;dop=head_2;flag=0;printf(请输入要查找学生的姓名:);scanf(%s,no);while(p!=NULL)if (strcmp(p-name,no)=0)printf(要查询的学生详细资料:n);printf(学号:%sn,p-num);printf(姓名:%sn,p-name);printf(%s 成绩: %fn,p-sub0.subname,p-sub0.score);printf(%s 成绩: %fn,p-sub1
29、.subname,p-sub1.score);printf(%s 成绩: %fn,p-sub2.subname,p-sub2.score);printf(%s 成绩: %fn,p-sub3.subname,p-sub3.score);printf(%s 成绩: %fn,p-sub4.subname,p-sub4.score);printf(总分:%lfn,p-sum);p=p-next;flag=1;else p=p-next;if(flag=0) printf(nttt没有该学生nn);getchar();printf(n是否继续查找其它学生信息?y/n?n);k=getchar();whi
30、le(k=y);getchar();printf(ntt查看完毕!按任意键返回);getchar();system(cls);七:查找学生成绩信息函数void search_score()/查找学生成绩信息system(cls);int a;printf(tt*n);printf(tt*n);printf(ttt1:按学号查找。n);printf(ttt2:按姓名查找。n);printf(ttt3:退出。n);printf(tt*n);printf(tt*n);printf(ntt输入一个有效的数字,选择你要做的操作:n);scanf(%d,&a);switch(a)case 1:search
31、_num();break;case 2:search_name();break;case 3:score();break;default:printf(ttt错误的菜单选项nn);break;八:学生成绩管理函数void score()/学生成绩管理system(cls);int a;printf(tt*学生管理系统*n);printf(tt*n);printf(ttt1:查找成绩信息。n);printf(ttt2:添加成绩信息。n);printf(ttt3:删除成绩信息。n);printf(ttt4:修改成绩信息。n);printf(ttt5:返回。n);printf(tt*n);print
32、f(tt*n);printf(ntt输入一个有效的数字,选择你要做的操作:n);scanf(%d,&a);switch(a)case 1:search_score();break;case 2:add_score();break;case 3:del_score();break;case 4:modify_score();break;case 5:main();break;default:printf(ttt错误的菜单选项nn);break;九:文件载入函数(void file3(void))1)函数原形:void file3(void)2)功 能:采用动态内存分配malloc函数和链表结构。
33、建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。3)变量及类型:STUCORE *stu,*p; 定义结构体指针FILE *fp; 定义文件指针4)说明:执行操作前一定要先执行void file3(void) 以通过动态内存分配建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。void file3(void)/文件载入 STUCORE *stu,*p;FILE *fp;stu=( STUCORE *) malloc(sizeof(STUCORE);if(fp=fopen(student.dat,rb)=NULL) print
34、f(ttt暂无学生信息,请添加!nn);head_2=stu;head_2-next=NULL;else head_2=p=stu;doif(fread(stu,sizeof(STUCORE),1,fp)=1) p-next=stu;p=p-next;stu=( STUCORE *) malloc(sizeof(STUCORE);while(!feof(fp);p-next=NULL;十:文件保存写入函数(void file4(void))1)函数原形:void file4(void)2)功 能:将链表内存中的数据保存写入到“student.dat”文件中。3)变量及类型:STUCORE *stu,*p; 定义结构体指针FILE *fp; 定义文件指针4)说明:执行添加,删除,修改操作后一定要执行void file4(void) 以将链表内存中的数据保存写入到“student.dat”文件中。void file4(void) /文件保存写入STUCORE *p;FILE *fp;if(fp=fopen(student.dat,wb+)=NULL) printf(ttt文件无法正常打开!nn);else p=head_2;dofwrite(p,sizeof(S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位招聘考试综合类专业知识试卷(计算机科学)试题库
- 工厂安全知识培训课件教育
- 山东省启思大联考2026届高三上学期暑假第一次模拟考试(开学)生物试卷
- 江西应用科技学院《期货市场》2024-2025学年第一学期期末试卷
- 新疆天山职业技术大学《口腔解剖生理学综合实训》2024-2025学年第一学期期末试卷
- 江苏财会职业学院《生物信息学应用实践》2024-2025学年第一学期期末试卷
- 淮南职业技术学院《智能系统设计与开发课程设计》2024-2025学年第一学期期末试卷
- 小学名著辩论题目及答案
- 采购合同管理计划考试题及答案
- 工具安全操作规程课件
- 20以内破十法练习题-A4打印版
- 铁路线路工中级技能鉴定练习题及答案
- 中小企业数字化转型水平评测指南
- 中国历史地理概况智慧树知到期末考试答案章节答案2024年复旦大学
- 越野赛道计划书
- DR002012 NE系列路由器路由协议故障处理 ISSUE 1.00
- 幻觉妄想的护理诊断及护理
- 2024年福建泉州水务集团有限公司招聘笔试参考题库附带答案详解
- 社区团购团长起号流程
- 安徽省高速公路施工标准化指南
- 国网超市化招标评标自动计算表(区间复合平均价法)
评论
0/150
提交评论