2022年c语言课程设计学生成绩管理系统_第1页
2022年c语言课程设计学生成绩管理系统_第2页
2022年c语言课程设计学生成绩管理系统_第3页
2022年c语言课程设计学生成绩管理系统_第4页
2022年c语言课程设计学生成绩管理系统_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、学习 - 好资料 目录 同学成果治理程序 题目要求 2设计目的 2总体设计 3详细设计 3调试与测试 12 源程序 14 总结 30 更多精品文档 第 1 页,共 30 页学习 - 好资料 同学成果治理程序 一 题目要求 1. 问题描述 : 对在校同学几门课程的考试成果进行统一治理 . 每个同学记录包括学号 , 姓名, 年龄, 数学 , 英语 , 物理成果 , 默认以学号为序存放 . 2. 要求: 1 一个文件按以班为单位储备同学记录 . 2 将答应的操作分为四种 , 以 A,B ,C,D,E,F 为标志 : A: 插入一个同学记录 B: 修改同学记录 ; C:删除一个同学记录 D:查找一个同

2、学记录 E: 浏览同学成果 : ; ; ; F: 退出 3. 运算同学的总成果 . 4. 按学号排序输出全班同学成果表 . 二 设计目的 依据题目要求 , 由于同学信息是存放在文件中 , 所以应供应文件的输入 , 输出 等操作 ; 在程序中需要浏览同学的信息 , 应供应显示 , 查找 , 排序等操作 ; 另外 仍应供应键盘式选择菜单实现功能选择 . 三 总体设计 依据上面的需求分析 , 可以将这个系统分为以下模块 : 输入模块 , 修改模块 , 删 除模块 , 查找模块 , 显示模块 . 更多精品文档 第 2 页,共 30 页学习 - 好资料 同学成果治理系统 数据输入 数据显示 数据修改 数

3、据删除 数据查找 四 详细设计 1. 主函数 : 主函数一般设计得比较简洁 , 只供应输入 , 处理和输出部分的函数调用 , 其中各功能模块用菜单方式选择 . 流程图 : 显示一系列功能模块 N 输入 n, 判定 n 是否是 A-F Y 依据 n 的值调用各功能模块函数 程序 : /#include head.h int menu_select char c; printfnn; 5. 统计信息 |n; printf | 1. 增加同学记录 printf | 2. 查询同学记录 6. 打开文件 |n; printf | 3. 修改同学记录 7. 储存文件 |n; printf | 4. 同学纪

4、录排序 8. 显示记录 |n; printf | 0. 退出系统 |n; printfnn; printf 请选择 0-8:; c=getchar; getchar; return c-0; 更多精品文档 第 3 页,共 30 页学习 - 好资料 2. 输入模块 : 分析 : 单独看各数据信息 , 学号, 姓名是字符型 , 可以接受字符型数组 ; 分数为整数 , 接受整数 ; 数据信息存放在文件中 便信息治理 . , 一条记录对应一个同学 , 既符合习惯又方 假如要存放如干同学信息就用结构体数组 : void addrecordstudent stud int i=0,j,num; char

5、str5; ifnumstus.=0 printf getsstr; 已有记录存在是否掩盖 .y/nn; ifstr0=Y|str0=y i=0; else i=numstus; printf 请输入增加的同学信息条目数 :; scanf%d,# ifi=0numstus=num; else numstus+=num; ifnumstuslens lens+=50; pointer=student *reallocpointer,lens*LEN; printf 请输入同学信息 :n; for;inumstus;i+ getchar; printf 请输入学号 :; getspoint

6、eri.number; printf 请输入姓名 :; ; printf 请输入性别 男/ 女 1/0:; getspointeri.sex; ifpointeri.sex0=0 strcpypointeri.sex, 女; 更多精品文档 第 4 页,共 30 页学习 - 好资料 else strcpypointeri.sex, 男; printf 请输入各科成果 : 按“语文, 数学, 英语,历史, 政治”的次序 :; studi.score=0; forj=0;j0 i=menu_select; /* switchi 把握菜单 */ case 1:addr

7、ecordpointer;break; /* case 2:findrecordpointer;break; /* case 3:amendrecordpointer;break; /* 增加同学信息 */ 查询同学信息 */ 修改同学信息 */ case 4:sortpointer;break; /* 同学信息排序 */ case 5:statisticpointer;break; /* 统计信息 */ case 6:openfilepointer;break; /* 打开文件 */ case 7:writetotextpointer;break; /* 储存文件 */ case 8:dis

8、playpointer,0,numstus-1;break; /* 显示记录 */ case 0: ifnumstus.=0 printf getsstr; 是否储存当前记录 .y/n; ifstr0=y|str0=Y writetotextpointer; i=-1;break; /* 退出系统 */ 更多精品文档 第 5 页,共 30 页学习 - 好资料 default:printf 请输入数字 08:n;i=1; /* 输入错误 */ printftt 欢迎再次使用本系统; nn; display1; 3. 修改模块 : 分析 : 用户输入要修改同学的学号 , 依据同学的学号等信息查找同

9、学记录 , 并提示用户修改该记录的哪部分信息 . 依据用户选择修改相应的信息 . 流程图 : 输入要修改的学号 找到 .Y 显 示 记 录 , N提示没有找 调用修改函 到 数 Y 连续 . N 返回主菜单 程序 : 更多精品文档 第 6 页,共 30 页学习 - 好资料 void xiugai iffp=fopens_score.txt,rb+=NULL|fp1=fopentemp.txt,wb+=NULL /* 检查是否出错 */ printfCannot open this file.n; exit0; printfnPLease shuru xiugai xuehao:; scanf%

10、d,&i; getchar; whilefread&data,sizeofdata,1,fp=1 j=atoidata.xuehao; ifj=i ing; printfPlease shuru mingzi:; getsdata.mingzi; printfPlease shuru shuxue score:; getstemp;data.score0=atoftemp; printfPlease input yingyu score:; getstemp;data.score1=atoftemp; printfPlease input wuli score:; getstemp;data.

11、score2=atoftemp; data.score3=data.score0+data.score1+data.score2; fwrite&data,sizeofdata,1,fp1; fseekfp,0L,0; /* 将位置指针移到离头文件 0 个字节处 */ fseekfp1,0L,0; whilefread&data,sizeofdata,1,fp1=1 fwrite&data,sizeofdata,1,fp; fclosefp; fclosefp1; 更多精品文档 第 7 页,共 30 页学习 - 好资料 4. 删除模块 : 分析: , 用户输入要删除的同学的学号 , 依据同学学

12、号查找记录并 该模块的功能是 删除 . 流程图 : 输入要删除的学号 找到 .Y 显 示 记 录 , N提示没有找 调用删除函 到 数 Y 连续 . N 返回主菜单 程序 : void deleterecordstudent stu,int i /* 删除信息 */ int j; whilei=0 forj=i;jnumstus;j+ stuj=stuj+1; numstus-; printf 删除成功 .n; 更多精品文档 第 8 页,共 30 页学习 - 好资料 void countstudent stud int i,j; fori=0;inumstus;i+ studi.index=1

13、; forj=0;jstudi.score studi.index+; 5. 查找模块 : 需求分析 : 该模块的功能是依据输入的同学的姓名查 找对应的记录 应的同学信息 . 流程图 : , 找到以后 , 显示相 输入同学学 号 是 否 找 Y 到 学 生 N记录 显示找到的 询 问 是 提示没有找 记录 到 否连续 N 返回主菜单 Y 更多精品文档 第 9 页,共 30 页学习 - 好资料 程序 : /#include head.h int findrecordstudent stud /* 查找信息 */ char str2; int i,num; ifnumstus=0 printf 没

14、有可被查找的记录 n; return -1; else printf 以何种方式查找? n1. 学号 t2. 姓名 t3. 名次 n; getsstr; ifstr0=1 /* 按学号查找 */ printf 请输入学号 :; getsstr; fori=0;i=numstus;i+ ifstrcmpstr,studi.number=0 displaystud,i,i; break; else continue; else ifstr0=2 /* 按姓名查找 */ printf 请输入姓名 :; getsstr; fori=0;i=numstus;i+ ifstrcmpstr,studi.na

15、me=0 displaystud,i,i; break; else continue; else ifstr0=3 /* 按名次查找 */ printf 请输入名次 :; scanf%d,# getchar; 更多精品文档 第 10 页,共 30 页学习 - 好资料 fori=0;inumstus printf return -1; 没有查找所要的信息; n; return i; 6. 显示模块 : 需求分析 : 该模块的功能是显示全部同学记录信息 程序 : . void welcome printft* *n; printftttt* 用.n; 学 生 成 绩 管 理 系 统 *nt

16、ttt 倾 情 奉 献 欢 迎 使 printft* *n; void showtable printf- -n; 更多精品文档 第 11 页,共 30 页学习 - 好资料 printf 学号 t 姓名t 性别 t 语文 t 数学t 英语 t 历史 t 政治t 总分 t 平 均分 t 名次n; printf- -n; void displaystudent stud,int n1,int n2 int i; showtable; /* 显示表头 */ fori=n1;i=n2;i+ printf%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn ,

17、studi.number,,studi.sex,studi.subject0,studi.s ubject1,studi.subject2,studi.subject3,studi.subject4,st udi.score,studi.average,studi.index; /* 通过循环输出数据 */ void display1 printftt printftt printftt 本系统由计科二班制作 制作人员列表 : nn; nn; 殷增锋 ttt 邵超 n; printfnn; getchar; 五 调试与测试 在这次课程设计中, 程序编写过程中遇到了很多的问题

18、, 各种函数的运用也让人 头疼,在上机编译运行过程中显现了很多的错误,例如:各种数据类型的定义, 函数的调用等等; 但最终仍是在老师同学的帮忙下进行了各种代码的编写与修改 , 最终程序成功的运行; 下面是各个模块的界面图 更多精品文档 第 12 页,共 30 页学习 - 好资料 1 主菜单函数 : 2: 输入模块 : 3: 显示模块 : 4: 删除模块 : 更多精品文档 第 13 页,共 30 页学习 - 好资料 5: 查找模块: 6: 修改模块 : 六程序源 #ifndef H_STUDENT_HH #define H_STUDENT_HH #include stdio.h #include

19、 string.h #include malloc.h #define LEN sizeofstruct message_student /* */ 一个结构体数组元素的长度 #define numsubs 5 /* 学科数目 */ 结构体定义 */ typedef struct message_student /* char number6; char name20; char sex4; float subjectnumsubs; float score; float average; int index; student; 更多精品文档 第 14 页,共 30 页学习 - 好资料 ext

20、ern int numstus; /* 同学数目 */ extern student *pointer; /* 指向结构体数组 */ extern int lens; int menu_select; /* 函数声明 */ int openfilestudent stu; int findrecordstudent stud; int writetotextstudent stud; void welcome; void display1; void showtable; void sortstudent stu; void deleterecordstudent stu,int i; voi

21、d addrecordstudent stud; void displaystudent stud,int n1,int n2; void amendrecordstudent stud; void countstudent stud; void sortnumstudent stud; void sortnum2student stud; void sortnamestudent stud; void sortname2student stud; void sortcountstudent stud; void sortcount2student stud; void statisticst

22、udent stud; void display1; #endif /#include head.h int menu_select char c; printfnn; printf | 1. 增加同学记录 5. 统计信息 |n; printf | 2. 查询同学记录 6. 打开文件 |n; printf | 3. 修改同学记录 7. 储存文件 |n; printf | 4. 同学纪录排序 8. 显示记录 |n; 退出系统 |n; printf | 0. printfnn; printf 请选择 0-8:; 更多精品文档 第 15 页,共 30 页学习 - 好资料 c=getchar; get

23、char;return c-0; /#include head.h int findrecordstudent stud /* 查找信息 */ char str2; int i,num; ifnumstus=0 printf 没有可被查找的记录 n; return -1; else printf以何种方式查找? n1. 学号 t2. 姓名 t3. 名次 n; getsstr; ifstr0=1 /* 按学号查找 */ printf 请输入学号 :; getsstr; fori=0;i=numstus;i+ ifstrcmpstr,studi.number=0 displaystud,i,i;

24、break; else continue; else ifstr0=2 /* 按姓名查找 */ printf 请输入姓名 :; getsstr; fori=0;i=numstus;i+ ifstrcmpstr,=0 displaystud,i,i;break; else continue; else ifstr0=3 /* 按名次查找 */ 更多精品文档 第 16 页,共 30 页学习 - 好资料 printf 请输入名次 :; scanf%d,# getchar; fori=0;inumstus printf return -1; 没有查找所要的信息; n; re

25、turn i; /#includehead.h int openfilestudent stu int i=0,j; FILE *fp; char filename20,str2; ifnumstus.=0 printf 已经有记录存在,是否储存 .y/n; getsstr; ifstr0=y|str0=Y writetotextstu; printf 请输入文件名 :; getsfilename; numstus=0;iffp=fopenfilename,rb+=NULL printf 无法打开该文件 n; return-1; fscanffp,%d,&numstus; fgetcfp; w

26、hileinumstus 更多精品文档 第 17 页,共 30 页学习 - 好资料 fscanffp,%s,stui.number; fscanffp,%s,; fscanffp,%s,stui.sex; forj=0;jnumsubs;j+ fscanffp,%f,&stui.subjectj; fscanffp,%f,&stui.score; fscanffp,%f,&stui.average; fscanffp,%d,&stui.index;i+; fclosefp; printf printf文件读取成功 n; 是否显示纪录 .y/n; getsstr; ifstr0

27、=y|str0=Y displaystu,0,numstus-1; return0; /#include head.h void sortstudent stud int i,j=0; char str5; student *p; p=stud; ifnumstus=0 printf 没有可供查询的记录 .; while1 fori=0;i+ printf请输入查询方式 :; n; printf(直接输入回车就终止查询操作) printf1.依据学号 t; printf2.依据姓名 t; 依据名次 n; printf3. getsstr; ifstrlenstr=0 break; ifstr0

28、=1 printf 请输入排序次序: n; 更多精品文档 第 18 页,共 30 页学习 - 好资料 printf1. printf2.升序排列 t; 降序排列 n; getsstr; ifstr0=1 sortnum2p; else sortnump; displaystud,0,numstus-1; else ifstr0=2 请输入排序次序: n; printf printf1.升序排列 t; 降序排列 n; printf2.getsstr; ifstr0=1 sortname2p; else sortnamep; displaystud,0,numstus-1; else ifstr0

29、=3 printf 请输入排序次序: n; 升序排列 t; printf1.降序排列 n; printf2. getsstr; ifstr0=1 sortcount2p; else sortcountp; displaystud,0,numstus-1; else printf 请输入 13; printf 是否退出排序 .y/n; getsstr; ifstr0=y|str0=Y break; return; void sortnumstudent stud int i,j; 更多精品文档 第 19 页,共 30 页学习 - 好资料 student temp; student *p;p=st

30、ud; fori=0;inumstus;i+ forj=0;j0 temp=*p+j; *p+j=*p+j+1; *p+j+1=temp; void sortnum2student stud int i,j; student temp; student *p; p=stud; fori=0;inumstus;i+ forj=0;j0 temp=*p+j; *p+j=*p+j+1; *p+j+1=temp; void sortnamestudent stud int i,j; student temp; student *p; p=stud; fori=0;inumstus;i+ forj=0;

31、j0 temp=*p+j; *p+j=*p+j+1; 更多精品文档 第 20 页,共 30 页学习 - 好资料 *p+j+1=temp; void sortname2student stud int i,j; student temp; student *p; p=stud; fori=0;inumstus;i+ forj=0;j0 temp=*p+j; *p+j=*p+j+1; *p+j+1=temp; void sortcountstudent stud int i,j; student temp; student *p; p=stud; fori=0;inumstus;i+ forj=0

32、;jstudj.index temp=*p+j; *p+j=*p+j+1; *p+j+1=temp; void sortcount2student stud int i,j; student temp; student *p; p=stud; 更多精品文档 第 21 页,共 30 页学习 - 好资料 fori=0;inumstus;i+ forj=0;jstudj+1.index temp=*p+j; *p+j=*p+j+1; *p+j+1=temp; /#includehead.h void statisticstudent stud /* int i,j=0,k=0; char c1,st

33、r2; 新增功能,输出统计信息 */ float averagenumsubs,sum=0; ifnumstus=0 printf 没有可被查找的记录 n; else while1 printf 下面将统计考试成果 n; printf 请选择你要统计哪科的成果 1.At2.Bt3.Ct4.Dt5.En; c1=getchar; printft 一共有个 %d 记录 n,numstus; /* 总共记录数 */ switchc1 case 1: fori=0;istudi.subject0 k=i; ifstudj.subject0studi.subject0 j=i; average0=sum

34、/numstus; printft 科目 A 的最高分 :n; /* 最高分 */ 名 :%s 分 printftt 学 号 :%s 姓 数:%.2fn,studj.number,,studj.subject0; printft 科目 A 的最低分是 :n; /* 最低分 */ 名 :%s 分 printftt 学 号 :%s 姓 数:%.2fn,studk.number,,studk.subject0; printft 科目 A 的平均分是 %5.2fn,average0; /* 平均分 */ 更多精品文档 第 22 页,共 30 页学习 - 好资料

35、break; case 2: fori=0;istudi.subject1 k=i; ifstudj.subject1studi.subject1 j=i; average1=sum/numstus; printft 科目 B 的最高分 :n; /* 最高分 */ 名 :%s 分 printftt 学 号 :%s 姓 数:%.2fn,studj.number,,studj.subject1; 名 分 printft 科目 B 的最低分是 :n; /* 最低分 */ :%s printftt 学 号 :%s 姓 数:%.2fn,studk.number,,

36、studk.subject1; printft 科目 B 的平均分是 %5.2fn,average1; /* 平均分 */ break; case 3: fori=0;istudi.subject2 k=i; ifstudj.subject2studi.subject2 j=i; average2=sum/numstus; printft 科目 C 的最高分 :n; /* 学 号 最高分 */ 名 :%s 分 printftt :%s 姓 数:%.2fn,studj.number,,studj.subject2; printft 科目 C 的最低分是 :n; /* 学 号

37、:%s 最低分 */ printftt 姓 名 :%s 分 数:%.2fn,studk.number,,studk.subject2; printft 科目 C 的平均分是 %5.2fn,average2; /* 平均分 */ break;case 4: fori=0;istudi.subject3 k=i; ifstudj.subject3studi.subject3 j=i; average3=sum/numstus; printft 科目 D 的最高分 :n; /* 学 号 最高分 */ 名 :%s 分 printftt :%s 姓 数:%.2fn,studj.num

38、ber,,studj.subject3; 更多精品文档 第 23 页,共 30 页学习 - 好资料 printft 科目 D 的最低分是 :n; /* 学 号 :%s 最低分 */ 名 :%s 分 printftt 姓 数:%.2fn,studk.number,,studk.subject3; printft 科目 D 的平均分是 %5.2fn,average3; /* 平均分 */ break;case 5: fori=0;istudi.subject4 k=i; ifstudj.subject4studi.subject4 j=i; average4

39、=sum/numstus; printft 科目 E 的最高分 :n; /* 最高分 */ 名 :%s 分 printftt 学 号 :%s 姓 数:%.2fn,studj.number,,studj.subject4; printft 科目 E 的最低分是 :n; /* 最低分 */ 名 :%s 分 printftt 学 号 :%s 姓 数:%.2fn,studk.number,,studk.subject4; printft 科目 E 的平均分是 %5.2fn,average4; /* 平均分 */ break; default:printf 输入错

40、误!请输入 15 之间的数 n; sum=0; getchar; printf 是否连续进行统计 .y/n; getsstr; ifstr0=y|str0=Y ; else break; int writetotextstudent stud /* int i=0,j; FILE *fp; char filename20; printf 输入文件名称 :; getsfilename; fp=fopenfilename,w; fprintffp,%dn,numstus; whileinumstus 更多精品文档 将全部记录写入文件 */ 学习 - 好资料 fprintffp,%s %s %s ,

41、studi.number,,studi.sex; forj=0;jnumsubs;j+ fprintffp,%f ,studi.subjectj; fprintffp,%f %f %d,studi.score,studi.average,studi.index; i+; fclosefp; printf 已成功储备 .n; displaystud,0,numstus-1; numstus=0; return 0; void welcome printft* *n; printftttt* 用.n; 学 生 成 绩 管 理 系 统 *ntttt 倾 情 奉 献 欢 迎 使 p

42、rintft* *n; void showtable printf- -n; printf 学号 t 姓名 t 性别tAtBtCtDtEt 总分t 平均分 t 名次n; printf- -n; void displaystudent stud,int n1,int n2 int i; showtable; /* 显示表头 */ fori=n1;i=n2;i+ 更多精品文档 第 25 页,共 30 页学习 - 好资料 printf%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn ,studi.number,,studi.sex,

43、studi.subject0,studi.s ubject1,studi.subject2,studi.subject3,studi.subject4,st udi.score,studi.average,studi.index; /* 通过循环输出数据 */ void display1 printftt printftt printftt 本系统由计科二班制作 制作人员列表 : nn; nn; 殷增锋 ttt 邵超 n; printfnn; getchar; #include void amendrecordstudent stud char str5; /* 供用户输入 */ int i=

44、-1,j; ifnumstus=0 /* 没有记录返回 */ printf 没有可供修改的记录! ; whilei=0 printf 要删除这个同学的信息吗 .y/n; getsstr; ifstr0=y|str0=Y deleterecordstud,i; countstud; else printf 确定要修改这个同学的信息吗 .y/n; getsstr; ifstr0=y|str0=Y printf 下面请重新输入同学的信息 :n; 更多精品文档 第 26 页,共 30 页学习 - 好资料 printf 请输入学号 :; getsstudi.number; printf 请输入姓名 :; ; printf 请输入性别 男/ 女 1/0:; getsstr; ifstr0=0 strcpystudi.sex, 女; else strcpystudi.sex, 男; studi.score=0; printf 请按次序输入成果 :; forj=0;j=0 forj=i;jnumstus;j+ stuj=stuj+1; numstus-; printf 删除成功 .n; 更多精品文档 第 27 页,共 30 页学习 - 好资料 void cou

温馨提示

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

评论

0/150

提交评论