学生成绩管理系统C语言程序论文_第1页
学生成绩管理系统C语言程序论文_第2页
学生成绩管理系统C语言程序论文_第3页
学生成绩管理系统C语言程序论文_第4页
学生成绩管理系统C语言程序论文_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 C语言大作业目 录目录一.目的2二.题目描述和要求2三.报告内容33.1需求分析33.2 概要设计43.3 详细设计53.4主要源程序代码83.5 测试分析223.6 设计结果22四.结论与心得23一.目的(报告正文部分):(要求:正文部分一律用小四号字,宋体,1.5倍行距。)随着大学生人数的增加,各种专业学科的增加,各班级各科成绩存储量提高同时也会导致教务系统的数据量也不断上涨。面对资料的繁多复杂,工作的辛苦,以及纸质保存方式的不便与容易丢失。针对此实际问题的存在,学生成绩管理系统,便应运而生。运用所学的C语言知识,构建简单的学生成绩管理系统,不仅强化上级动手能力,在理和实践的基础上进一步

2、巩固C语言程序设计课程所内容,掌握工程化软件设计的方法。而且学会将知识用于实际的方法,进一步提高个人的问题分析解决能力,有利于个人综合能力的提高。还能够为之后的专业实践或者学习打下务实坚定的基础。同时明确学生对成绩管理系统的功能需求和性能需求,并将这些需要用规范的C语言和规范的结构完整准确的表达清楚,由此达到对学生管理系统软件的理解和对C语言的知识规范使用。二.题目描述和要求从分析问题入手,设计可行的算法,进而编出相应的C程序。强调上机实践过程,从实际应用出发,运用Viusal C+ 6.0编写学生成绩管理系统。应用链表及外部文件,独立设计上述应用系统,并编程实现以下功能: 信息录入录入学生信

3、息(包括姓名、学号、各科成绩)。 信息查询输入学号,查询与学号相对应的信息(包括成绩),并按可选的自定义规则进行排序。按班级统计学科总分、平均分等。 信息删除与修改输入学号,删除该学号对应的成绩信息。输入学号,查询并显示出该学号信息,并在此基础上进行修改。 计算学生成绩计算每位学生的总分。计算每位学生的平均分。成绩排序。信息保存将学生信息保存在文件中。根据以上功能需求,定义通讯录信息结构,并采用链表结构对数据进行存储。提供友好的用户界面,方便用户操作。三.报告内容3.1需求分析设计题目:学生成绩管理系统设计要求:应用链表及外部文件,独立设计上述应用系统,并编程实现以下功能: 信息录入录入学生信

4、息(包括姓名、学号、各科成绩)。 信息查询输入学号,查询与学号相对应的信息(包括成绩),并按可选的自定义规则进行排序。按班级统计学科总分、平均分等。 信息删除与修改输入学号,删除该学号对应的成绩信息。输入学号,查询并显示出该学号信息,并在此基础上进行修改。 计算学生成绩计算每位学生的总分。计算每位学生的平均分。成绩排序。信息保存将学生信息保存在文件中。根据以上功能需求,定义通讯录信息结构,并采用链表结构对数据进行存储。提供友好的用户界面,方便用户操作。系统功能分析:1 输入功能:可以一次完成无数条信息的输入。 2 输出功能:能按输出排序功能多个学生的成绩单或者按查找功能输出学生的成绩单。 3

5、修改功能:完成对单个学生成绩的修改。 4 查找功能:按学号完成对单个学生信息查找,并显示。 5 排序功能:按学生成绩进行排序,并显示。6 保存功能:能够将输入的信息保存,并能读取 7 有一个清晰美观界面来调用各个功能3.2 概要设计系统总体设计框架:主菜单:提供平台选择界面,供用户选择功能,链接其他模块的工作,以及包含退出系统。1. Student_Insert :输入模块,录入学生学号,姓名以及三科成绩,并运算平均分和总分2. Student_Search:匹配已知学号与输入学号是否正确,并返回结果 2.1 Student_Select:查找学生信息,并输出 2.2 Student_Dele

6、te:删除存在的学生成绩 2.3 Student_Modify:修改学生信息,并输出3. Student_Sort_Average & Student_Sort_Mark1 :按学生的平均分或者学生的英语成绩排序 3.1 Student_Display:输出多名学生的按平均分或者英语成绩排名的名单4. Read:运用fread将文件从已保存文件里读出5. Write:运用fprintf和fwrite函数分别保存输入的学生信息系统功能模块图:main函数菜单选择函数输入记录函数显示记录函数查找显示函数修改记录函数删除记录函数排序记录函数匹配学号函数保存记录函数读取记录函数退出函数3.3

7、详细设计主要功能模块的算法设计思路:学生成绩管理系统的设计一开始由主程序界面设计出发,运用case函数链接8个子模块:1:输入学生的资料;2:查询学生成绩;3:修改学生资料;4:删除学生成绩 ;5:排序学生成绩;6:保存输入的学生资料;7:从文件调入学生信息;8:退出程序;操作者可以根据不同需求选择不同的操作。 首先设计的主模块程序设计中,运用main,功能:通过调用Student_Insert,Student_Search,Student_Select,Student_Delete,Student_Modify,Student_Sort_Average,Student_Sort_Mark1,

8、Student_Display,Read,Write等函数,实现学生成绩查询与管理功能 首先用while(1)控制,保障在每次菜单操作后返回主页面。之后用swtich对用户输入值进行判断,决定进行何种操作。对于具体的返回值,又调用其他函数,实现对学生成绩管理系统的各个功能的操作。子模块程序当中,首先编写的是输入程序主要运用scanf函数接受用户输入的学号,姓名,英语,数学,物理的学生信息。然后依次编写的学生信息查询,学生信息修改,学生信息删除都建立在学号匹配的Student_Search函数上,运用for和if函数对输入的学号依次对以保存的学号进行一一的对比,若寻找到正确的学号就返回学号,若寻

9、找不到着返回-1值。若返回-1值,紧接的Student_Search,Student_Select,Student_Delete,三个函数则输出学号不存在。若返回得到学号值则:1. Student_Search:运用printf输入相应的学号结构体的信息。2. Student_Select:首先输出相应的学号结构体的信息,然后运用scanf重新获取用户输入的学生信息。3. Student_Delete:首先输出相应的学号结构体的信息,然后运用for函数,依次将后面一个的学号结构体的信息赋予给前一个学号结构体的信息,从而达到删除的目的。然后就编写排序Student_Sort_Average,St

10、udent_Sort_Mark1排序模块,同样运用for和if函数对每一个学生结构体信息相应的平均分和英语成绩进行一一对比,然后赋值进行排序的目的。在这两个函数的基础上Student_Display函数就运用printf依次输出上述的排序结果。接下来则编写Read和Write函数,后者主要运用fprintf和fwrite将用户输入的数据写进去txt文档,fprintf实践当中产生的txt文档更加方便用户直接的观看信息,fwrite产生的txt文档则更加方便系统下一次读入文件使用。Read主要运用fread函数,主要用于读取fwrite写出txt文档。最后写得是退出函数由于比较简单直接嵌入在主函

11、数当中,直接用exit来退出系统。工作流程图:选择选择选择选择选择开始结束选择操作输入数据排序显示数据查询删除输出界面修改数据退出系统按学号匹配按学号匹配保存数据吧按平均成绩或英语选择按学号匹配读取数据吧三门成绩学号姓名选择选择3.4主要源程序代码存储结构设计说明:系统的运行过程中,运用学生信息输入的子模块程序首先输入学生信息,存储过程中主要运用fwrite和fprintf将输入的学生信息存放在txt文件当中。在运行当中fwrite存储的学生数据文件一般为二进制文件仅能通过系统中编写的得读取程序子模块来读取存储的文件信息。因此,特意加入fprintf函数,对学生的信息进行直观的存储,用户可以直

12、接通过txt文件打开查看学生信息。完整源程序清单:#include <windows.h>/*延时程序所在的头文件*/#include <stdlib.h>#include <stdio.h>#include <string.h>struct Student char ID20; char Name20; float Mark1; float Mark2; float Mark3; double Mark_ave; double Mark_tot;student1000;/*声明学生数组及学生数量*/int num=0;struct Studen

13、t *p;/*输入记录函数*/ void Student_Insert() while(1) printf("请输入学号:"); scanf("%s",&studentnum.ID); getchar();/清除回车符 printf("请输入姓名:"); scanf("%s",studentnum.Name); getchar();/清除回车符 printf("请输入英语:"); scanf("%f",&studentnum.Mark1); getchar()

14、;/清除回车符 printf("请输入数学:"); scanf("%f",&studentnum.Mark2); getchar();/清除回车符 printf("请输入物理:"); scanf("%f",&studentnum.Mark3); getchar(); /清除回车符 studentnum.Mark_ave=(studentnum.Mark1+studentnum.Mark2+studentnum.Mark3)/3; /*求平均值*/ studentnum.Mark_tot = stud

15、entnum.Mark1+studentnum.Mark2+studentnum.Mark3; /*求总分*/ num+; printf("是否继续?(y/n)"); if (getchar()='n') break; /* 寻找匹配学号*/ int Student_Search(char name) int i; for (i=0;i<num;i+) if (strcmp(studenti.ID,name)=0) return i; return -1; /*查找显示函数*/ void Student_Select() while(1) char n

16、ame20; int index; printf("请输入要查询的学生的学号:"); scanf("%s",&name); getchar(); index=Student_Search(name); if (index=-1) printf("学生不存在!n"); Sleep(2000);/*让错误警告显示延时一秒*/ goto lab; else p=&studentindex; printf("你要查询的学生信息为:n"); /*显示单条学生记录*/ printf("%10s%10s

17、%8s%8s%8s%10s%10sn","学号","姓名","英语","数学","物理","平均成绩","总分"); printf("-n"); printf("%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2fn",(*p).ID,(*p).Name,(*p).Mark1,(*p).Mark2,(*p).Mark3,(*p).Mark_ave,(*p).Mark_tot); print

18、f("是否继续?(y/n)"); if (getchar()='n') break; lab:break; /*删除记录函数*/ void Student_Delete() while(1) char id20; int index; printf("请输入要删除的学生的学号:"); scanf("%s",&id); getchar(); index=Student_Search(id); if (index=-1) printf("学生不存在!n"); Sleep(2000);/*让错误警

19、告显示延时一秒*/ break; else p=&studentindex; printf("你要删除的学生信息为:n"); /*显示单条学生记录*/ printf("%10s%10s%8s%8s%8s%10s%10sn","学号","姓名","英语","数学","物理","平均成绩","总分"); printf("-n"); printf("%10s%10s%8.2f%8.2f

20、%8.2f%10.2f%10.2fn",(*p).ID,(*p).Name,(*p).Mark1,(*p).Mark2,(*p).Mark3,(*p).Mark_ave,(*p).Mark_tot); printf("是否真的要删除?(y/n)"); if (getchar()='y') for (p;p<&studentnum-1;p+) (*p)=(*(p+);/把后边的对象都向前移动 num-; getchar(); printf("是否继续删除y/n)"); if (getchar()='n'

21、;) break; /*修改记录函数*/ void Student_Modify() while(1) char id20; int index; printf("请输入要修改的学生的学号:"); scanf("%s",&id); getchar(); index=Student_Search(id); if (index=-1) printf("学生不存在!n"); Sleep(2000);/*让错误警告显示延时一秒*/ break; else printf("你要修改的学生信息为:n"); /*显示单条

22、学生记录*/ printf("%10s%10s%8s%8s%8s%10s%10sn","学号","姓名","英语","数学","物理","平均成绩","总分"); printf("-n"); printf("%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2fn",studentindex.ID,studentindex.Name,studentindex.Mark1,stude

23、ntindex.Mark2,studentindex.Mark3,studentindex.Mark_ave,studentindex.Mark_tot); printf("- 请输入新值-n"); printf("请输入学号:"); scanf("%s",&studentindex.ID); getchar(); printf("请输入姓名:"); scanf("%s",&studentindex.Name); getchar(); printf("请输入英语:&qu

24、ot;); scanf("%f",&studentindex.Mark1); getchar(); printf("请输入数学:"); scanf("%f",&studentindex.Mark2); getchar(); printf("请输入物理:"); scanf("%f",&studentindex.Mark3); getchar(); studentindex.Mark_ave=(studentindex.Mark1+studentindex.Mark2+stu

25、dentindex.Mark3)/3; studentindex.Mark_tot = studentindex.Mark1+studentindex.Mark2+studentindex.Mark3; printf("是否继续?(y/n)"); if (getchar()='n') break; /*按平均值排序记录函数*/ void Student_Sort_Average() int i,j; struct Student tmp; for (i=0;i<num;i+) for (j=1;j<num-i;j+) if (studentj-1

26、.Mark_ave < studentj.Mark_ave) tmp=studentj-1; studentj-1=studentj; studentj=tmp; /*按英语值排序记录函数*/ void Student_Sort_Mark1() int i,j; struct Student tmp; for (i=0;i<num;i+) for (j=1;j<num-i;j+) if (studentj-1.Mark1 < studentj.Mark1) tmp=studentj-1; studentj-1=studentj; studentj=tmp; /*显示记录

27、函数*/ void Student_Display() printf("%10s%10s%8s%8s%8s%10s%10sn","学号","姓名","英语","数学","物理","平均成绩","总分"); printf("-n"); for (p=student;p<&studentnum;p+) printf("%10s%10s%8.2f%8.2f%8.2f%10.2f%10.2fn&quo

28、t;,(*p).ID,(*p).Name,(*p).Mark1,(*p).Mark2,(*p).Mark3,(*p).Mark_ave,(*p).Mark_tot); /*将学生信息从文件读出*/ void Read() FILE *fp; int i; if (fp=fopen("Database.txt","rb")=NULL) printf("不能打开文件!n"); return; if (fread(&num,sizeof(i),1,fp)!=1) /*将fp文件中每项四个字节的i写入到num当中*/ num=-1;

29、else for(i=0;i<num;i+) fread(&studenti,sizeof(struct Student),1,fp);/*读取fp文件里面每项的全部内容写入到结构体当中*/ fclose(fp); printf("已经成功读取文件"); getchar(); getchar(); /*将学生信息写入文件*/ void Write() FILE *fp; int i; if (fp=fopen("Database.txt","wb")=NULL) printf("不能打开文件!n");

30、 return; if (fwrite(&num,sizeof(i),1,fp)!=1)/*将输入学生的num指针以每项4个字节输入到fp文件当中*/ printf("写入文件错误!n"); for (i=0;i<num;i+) if (fwrite(&studenti,sizeof(struct Student),1,fp)!=1) /*从结构体学生信息当中获取资料填写到fp文件当中*/ printf("写入文件错误!n"); fclose(fp); p=student; fp=fopen("学生成绩.txt"

31、,"w"); fprintf(fp,"%8s", "学号"); fprintf(fp,"%8s", "姓名"); fprintf(fp,"%8s", "英语"); fprintf(fp,"%8s", "数学"); fprintf(fp,"%8s", "物理"); fprintf(fp,"%12s", "平均分"); fprintf(fp,

32、"%12sn", "总分"); fprintf(fp,"=n"); putchar('n'); for (i = 0; i< num; i+,p+) fprintf(fp,"%8s",(*p).ID); fprintf(fp,"%8s", (*p).Name); fprintf(fp,"%8.1lf", (*p).Mark1); fprintf(fp,"%8.1lf", (*p).Mark2); fprintf(fp,"%1

33、0.1lf", (*p).Mark3); fprintf(fp,"%12.1lf", (*p).Mark_ave); fprintf(fp,"%10.1lfn", (*p).Mark_tot); fprintf(fp,"=n"); fclose(fp); printf("文件已保存到"学生成绩.txt""); getchar(); getchar();/* 菜单选择函数*/void main() int choice; int choice1; while(1) printf(&quo

34、t;n= 广石化学生成绩管理系统 =n"); printf(" By 冼俊铭n"); printf(" 1. 学生信息录入n"); printf(" 2. 学生信息输出n"); printf(" 3. 学生信息查询n"); printf(" 4. 删除学生信息n"); printf(" 5. 修改学生信息n"); printf(" 6. 从txt文本读取n"); printf(" 7. 保存到txt文本n"); printf(

35、" 8. 退出n"); printf(" 请选择(1-8):"); scanf("%d",&choice); getchar(); switch(choice) case 1: Student_Insert(); break; case 2: printf("请选择排序方式:n"); printf("1.按平均分排序输出:n"); printf("2.按英语排序输出:n"); printf("请选择(1-2):"); scanf("%d&

36、quot;,&choice1); getchar(); switch(choice1) case 1: Student_Sort_Average(); Student_Display(); break; case 2: Student_Sort_Mark1(); Student_Display(); break; break; case 3: Student_Select(); break; case 4: Student_Delete(); break; case 5: Student_Modify(); break; case 6: Read(); break; case 7: Write();break; case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论