《2022年c语言课程设计:学生管理信息系统设计 .pdf》由会员分享,可在线阅读,更多相关《2022年c语言课程设计:学生管理信息系统设计 .pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学生管理信息系统设计- - 1 - - 一、设计任务1. 选题意义设计该项目可以简化学生信息管理的流程,使管理更加简便、清晰。本程序包含输入记录、显示记录、按成绩排序、插入记录、删除记录(按姓名查找并删除)、查找并显示记录(按姓名查找)、输出系统信息等各种学生管理系统所需功能,基本能够满足管理需求。2. 设计目标设计该程序是为了实现更简洁的学生信息管理,满足管理学生学号、 姓名和成绩等信息的要求。系统具体功能如下:(1)输入记录输入的记录包括:学生学生证号、姓名、成绩;(2)显示记录显示所有以上输入记录或根据成绩排序后的记录;(3)按成绩排序根据学生成绩由大到小排序;(4)插入一条记录 插入一
2、条包含学生信息的记录;(5)删除一条记录查找姓名,并删除该学生记录;(6)查找按照学生姓名查找并显示该学生信息;(7)输出统计信息输出包含:记录总数、最高分、最低分、平均分和挂科学生信息等;(8)读取信息将保存与 VC 同一个盘的文件中的学生记录读取出来;(9)存储信息将学生信息保存指定文件中;(10)退出程序。二、程序设计与实现1. 程序结构该系统首先定义了包含:学生学号、姓名、成绩的结构体。然后定义了菜单函数供用户选择, 紧接着定义了实现以上各功能的子函数。最后是主函数, 主函数通过 switch语句实现对各子函数的调用。图 1. 系统程序功能组成框图名师资料总结 - - -精品资料欢迎下
3、载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 2 - - 学生信息管理系统菜单选择保存至文件统计信息从文件读取查找记录删除记录插入记录按成绩排序读入记录显示记录退出系统2. 数据描述结构体类型定义说明说明:该程序定义了一个结构体, 结构体变量名为student ,结构体数组包含: (char型)学号、( char型)学生姓名以及( int 型)学生成绩。该结构体如下:typedef struct /*定义结构体数组 */ char n
4、um10; /*学号*/ char name20; /*姓名*/ int score; /*成绩*/ Student; Student stu80; /*结构体数组变量 */ 3. 函数功能说明程序包含 11 个函数,除主函数外,还有:菜单函数int menu_select() 、输入记录函数 int input(student stud,int n)、显示所有记录函数 void Display(student stud,int n) 、 排 序 函 数 void sort_by_score(student stud ,int n) 、 插 入 记 录 函 数 int Insert_a_rec
5、ord(student stud int n)、删除记录函数 int Delete_a_record(student stud,int n)、查询函数void Query_a_record(student stud ,int n)、统计系统信息函数void Statistic(student stud,int n)、读取信息函数 int AddfromText(stuent stud,int n)、存储信息函数 void WritetoText(student stud,int n)等 10 个辅助系统完成各项功能函数。各函数详细说明如下:名师资料总结 - - -精品资料欢迎下载 - - -
6、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 3 - - (1)主函数 void main()算法描述: 利用无限次循环for(;)和 switch()实现对各函数的调用, 系统根据输入的数字选项来调用相应的函数,实现相应的功能。(2)菜单函数 int menu_select() 函数功能:使用者通过输入数字选项实现对各功能的使用。当运行完任一功能,返回运行界面时,也要用到该函数。算法描述:使用 do-while 循环进行菜单选择 ,在循环内用 ge
7、tchar()读如所选择的序号,并且每次运行都运用system(cls)进行清屏。(3)输入记录函数 int input(student stud,int n)函数功能:输入学生学号、姓名和成绩,输入后有一个提示语句是否继续输入。根据需要选择Y:继续输入记录;选择N:停止输入。算法描述:使用 while 循环和标准输入函数进行数据的输入。(4)显示所有记录函数 void Display(student stud,int n) 函数功能:将输入的所有记录显示在运行界面,或将按成绩排序后的记录显示在界面。算法描述: 使用 for 循环进行循环输出, 循环内运用 if 语句使十条数据可以实现暂停功能
8、。其中还包含了一些辅助的使界面更简洁、清晰的语句(5)排序函数 void sort_by_score(student stud ,int n) 函数功能:按学生成绩由高到底的顺序进行排序。算法描述:运用简单冒泡法排序,排序后通过显示记录功能将排序后的记录显示在界面。(6)插入记录函数 int Insert_a_record(student stud int n) 函数功能: 插入学生信息, 包括学生学号、 姓名和成绩, 插入同时按成绩进行排序,并显示“添加成功”。算法描述: 使用标准的输入函数输入一条学生记录,带到返回值中, 并调用排序函数将该学生记录插入到排好序的记录中。(7)删除记录函数
9、int Delete_a_record(student stud,int n) 函数功能: 按姓名将需要删除的记录删除。首先输入姓名, 判断是否存在该学生记录:如果存在,回车后,显示“删除成功”;如果不存在,显示“无法找到该信息”。算法描述:运用标准输入函数输入需要删除记录的学生的姓名,通过用while循环查找该学生信息,再运用if 语句看是否存在该学生,无则返回“无法找到该信息”,有则运用for 循环进行删除操作,即找到记录后用后面记录覆盖前面的记录。这种方法虽不是直接将记录删除, 只是将后边的学生记录复制到要删除的学生记录,但实现的功能是相同的。执行完删除命令后返回“删除成功”。名师资料总
10、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 4 - - (8)查询函数 void Query_a_record(student stud ,int n) 函数功能:定义该函数为无返回值的的有参函数,根据输入的姓名查找并显示学生的学号、姓名和成绩。算法描述:运用标准的输入函数输入要查找的学生姓名,然后进行 while 循环,用 if 语句进行判断是否存在该学生信息,无则显示“无法找到该信息”,有则将该学生信
11、息运用标准输出函数输出。(9)统计系统信息函数 void Statistic(student stud,int n) 函数功能:统计输入的学生信息, 包括记录总数,成绩最低和最高学生的学号、姓名和成绩,以及所有学生的平均成绩和挂科学生(即成绩小于60 分)的信息。算法描述:首先统计记录的条数输出总共的记录条数,然后对所有成绩求和,存入 sum 变量中,再求平均值并将平均值输出。用两条if 语句找到最高分和最低分, 并分别将他们的信息输出。 最后运用 for 循环并定义 flag 作为标记挂科的变量,即当 flag=1 时,该学生挂科,输出他的信息。若没有学生挂科,则输出“无学生挂科”。(10)
12、读取信息函数 int AddfromText(stuent stud,int n) 函数功能:定义该函数为一个有返回值的有参函数,根据输入的文件名进行读取记录。算法描述:运用标准输入函数输入文件名,通过if 语句判断,如果有该文件则打开,并使用fscanf进行操作,无该文件则显示“打开失败”。(11)存储信息函数 void WritetoText(student stud,int n) 函数功能:该函数定义为无返回值的有参函数,可以把学生记录保存自己命名的文件中。算法描述:运用 while 循环进行存储,并使用fprintf,存储完成之后显示“操作成功”,可以使用读取功能读取此文件的内容。图
13、2.系统总流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 5 - - 三、设计难点与解决方法(1) 设计难点存储记录退出程序统计信息查找记录N=0 N=9 N=8 N=7 N=6 开始输入 N N=1 N=2 N=3 N=4 N=5 输入数据显示记录按成绩排序插入记录删除记录读入数据结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
14、 - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 6 - - 设计难点包括:数组的调用、按成绩运用冒泡法进行排序、查找挂科学生信息和文件的使用以及怎样将记录存储到指定文件等。(2) 解决方法通过看书以及请教老师和同学将难点一一解决。四、设计效果与不足之处图 3 程序效果图如下:不足之处:(1)程序仅包含了一项学生成绩,在实际运用中需要多门成绩进行统计操作;(2)运行第 8 功能时,需先运行9 功能将信息存储到指定文件中,才能运行8 功能,否则直接运行8 功能将无法打开文件;(3)输入太多个学生的信息时,屏幕
15、显示不能控制为一页一页显示。五、 学习体会经过几周的程序编写和调试,我受益匪浅,学到了很多以前不知道的东西:(1)学会了认识调试中产生的各种错误,通过分析引起错误的原因并改正。有时候会出现很多错误,而其中的某些错误有可能都是由一个错误引起的。因此,改正一个后,会有多个错误同时消失;(2)通过查书和上网查询了解和认识了很多头文件,例如:stdlib.h动态存储分配头文件、 ctype.h字符函数头文件等;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - -
16、- - - - - - 学生管理信息系统设计- - 7 - - (3)通过这次程序设计使我认识到使用结构体的方便、快捷,以及调用结构体数组时应该注意的问题,特别是结构体变量名与成员名之间的“.”;(4)这次设计让我充分的认识到C 语言的重要性。 此程序虽参考了很多文献资料,但其中的程序基本是在自己知识范围内完成的。总结:这次的课程设计为我以后阅读C 程序和设计程序打下了坚实的基础,也为继续学习其他语言开了一个很好的头。附录 1:程序使用说明为了使用者能够获得正确的程序运行结果,防止未按程序要求输入, 导致程序退出,现对该程序说明如下:(1)程序运行环境:VC+ ;(2)文件夹设置:所有文件包含
17、在以“P081513088 黄鑫”命名的文件夹中,包含一个“学生管理信息系统.cpp”文件,直接打开运行即可;(3)文件组成说明:程序头文件由#include动态 存储分配头文件、#include 字 符 函 数 头 文 件 、 #include 库 函 数 文 件 、#include字符串函数文件组成;(4)操作说明:打开C+程序,编译、链接、运行,此时运行界面。屏幕显示菜单选择输入 09 的数字选择菜单, 选择菜单后按照提示输入信息再进行操作,系统中的提示信息都设置为中文提示,所以直接按照提示进行操作即可,系统功能以上已有介绍,此处不再赘述。注意:操作时当第二次或者第三次进入系统时,无需重
18、新输入记录,只需先执行第 8 功能,按提示输入上一次用户指定所有保存记录的文件的文件名,打开该文件,然后使用第 2 功能就可以显示所有已保存的记录,即上次输入的记录已保存在指定文件当中,无需更新记录,请用户注意。附录 2:源程序#include /*引用库函数 */ #include #include #include typedef struct /*定义结构体数组 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - - - - 学生
19、管理信息系统设计- - 8 - - char num10; /*学号*/ char name20; /*姓名*/ int score; /*成绩*/ Student; Student stu80; /*结构体数组变量 */ int menu_select() /*菜单函数 */ char c; do system(cls); /*运行前清屏 */ printf(tt 欢迎使用学生信息管理系统n); printf(tt*n); printf(tt * 学生管理信息系统 *n); /*菜单选择 */ printf(tt | 1. 请输入记录|n); printf(tt | 2. 显示所有记录|n)
20、; printf(tt | 3. 排序|n); printf(tt | 4. 添加记录|n); printf(tt | 5. 删除记录|n); printf(tt | 6. 查询|n); printf(tt | 7. 统计系统信息|n); printf(tt | 8. 从正文中添加记录|n); printf(tt | 9. 将所有记录存储到文件中|n); printf(tt | 0. 退出程序|n); printf(tt*n); printf(tt 请选择使用选项: (0-9):); c=getchar(); /*读入选择 */ while(c9); return(c-0); /*返回选择 *
21、/ int Input(Student stud,int n) /*输入若干条记录 */ int i=0; char sign,x10; /*x10 为清除多余的数据所用 */ while(sign!=n&sign!=N) /* 判断*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 9 - - printf(ttt 请输入学生证号 :); /* 交互输入 */ scanf(ttt%s,studn
22、+i.num); printf(ttt 请输入学生姓名 :); scanf(ttt%s,studn+i.name); printf(ttt 请输入学生成绩 :); scanf(ttt%d,&studn+i.score); gets(x); /*清除多余的输入 */ printf(ttt 是否继续输入记录 ?(Y/N); scanf(ttt%c,&sign); /* 输入判断 */ i+; return(n+i); void Display(Student stud,int n) /* 显示所有记录 */ int i; printf(ttt-n); /*格式头 */ printf(ttt 学生证
23、号姓名成绩 n); printf(ttt-n); for(i=1;i1&i%10=0) /* 每十个暂停 */ printf(ttt-n); /*格式*/ printf(ttt); system(pause); printf(ttt-n); printf(ttt); system(pause); void Sort_by_score(Student stud,int n) /*按成绩排序 */ int i,j,*p,*q,s; char t10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
24、- - 第 9 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 10 - - for(i=0;in-1;i+) /* 冒泡法排序 */ for(j=0;jn-1-i;j+) if(studj.scorestudj+1.score) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,studj.name); strcpy(studj.name,t); p=&studj+1.sc
25、ore; q=&studj.score; s=*p; *p=*q; *q=s; int Insert_a_record(Student stud,int n) /*插入一条记录 */ char x10; /*清除多余输入所用 */ printf(ttt 学生证号 :); /*交互式输入 */ scanf(ttt%s,studn.num); printf(ttt 学生姓名 :); scanf(ttt%s,studn.name); printf(ttt 学生成绩 :); scanf(ttt%d,&studn.score); gets(x); n+; Sort_by_score(stud,n); p
26、rintf(ttt 添加成功 !n); /* 返回成功信息 */ return(n); int Delete_a_record(Student stud,int n) /*按姓名查找,删除一条记录*/ char s20; int i=0,j; printf(ttt 请输入该学生姓名 :); /*交互式问寻 */ scanf(%s,s); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 11 - -
27、 while(strcmp(studi.name,s)!=0&in) i+; /* 查找判断 */ if(i=n) printf(ttt 无法找到该信息 !n); /* 返回失败信息 */ return(n); for(j=i;jn-1;j+) /* 删除操作 */ strcpy(studj.num,studj+1.num); strcpy(studj.name,studj+1.name); studj.score=studj+1.score; printf(ttt 删除成功 !n); /* 返回成功信息 */ return(n-1); void Query_a_record(Student
28、stud,int n) /*查找并显示一个记录 */ char s20; int i=0; printf(ttt 请输入要查询的学生姓名:); /*交互式输入 */ scanf(ttt%s,s); while(strcmp(studi.name,s)!=0&in) i+; /* 查找判断 */ if(i=n) printf(ttt 无法找到该信息 !n); /* 输入失败信息 */ return; printf(ttt 该学生学生证号 :%sn,studi.num); /* 输出该学生信息 */ printf(ttt 该学生的成绩 :%dn,studi.score); void Statist
29、ic(Student stud,int n) /*新增功能,输出统计信息*/ int i,j=0,k=0,sum=0,flag,m=0; float aver; /*成绩平均值 */ for(i=0;istudi.score) j=i; if(studk.scorestudi.score) k=i; aver=1.0*sum/n; printf(ttt 总计 %d 记录.n,n); /* 总共记录数 */ printf(ttt 最低学生成绩 :n); /* 最低分 */ printf(ttt 学生证号 :%s 姓名:%s 成绩:%dn,studj.num,studj.name,studj.sc
30、ore); printf(ttt 最高学生成绩 :n); /* 最高分 */ printf(ttt 学生证号 :%s 姓名 :%s 成绩 :%dn,studk.num,studk.name,studk.score); printf(ttt 平均成绩:%5.2fn,aver); /*平均分 */ printf(nttt 挂科学生信息 :n); for(i=0;in;i+) flag=0; if(studi.score60) flag=1; +m; if(flag=1) printf(ttt学 生 证号 :%s 姓 名:%s 成绩:%dn,studi.num,studi.name,studi.sc
31、ore); if(m) printf(ttt挂科人数为 :%dn,m); else printf(ttt 无学生挂科 !n); int AddfromText(Student stud,int n) /* 从文件中读入数据 */ int i=0,num; FILE *fp; /* 定义文件指针 */ char filename20; /*定义文件名 */ printf(ttt 请输入文件名 :); scanf(ttt%s,filename); /* 输入文件名 */ if(fp=fopen(filename,rb)=NULL) /*打开文件 */ printf(ttt 无法打开文件 !n);
32、/* 打开失败信息 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 13 - - printf(ttt); system(pause); return(n); fscanf(fp,%d,&num); /* 读入总记录量 */ while(inum) /* 循环读入数据 */ fscanf(fp,%s%s%d,studn+i.num,studn+i.name,&studn+i.score);
33、i+; n+=num; fclose(fp); /*关闭文件 */ printf(ttt 成功!n); printf(ttt); system(pause); return(n); void WritetoText(Student stud,int n) /* 将所有记录写入文件 */ int i=0; FILE *fp; /* 定义文件指针 */ char filename20; /*定义文件名 */ printf(ttt 从正文中添加记录: n); /*输入文件名 */ printf(ttt 请输入文件名 :); scanf(ttt%s,filename); if(fp=fopen(fil
34、ename,w)=NULL) /*打开文件 */ printf(ttt 无法打开文件 !n); system(pause); return; fprintf(fp,%dn,n); /* 循环写入数据 */ while(in) fprintf(fp,%-16s%-15s%dn,studi.num,studi.name,studi.score); i+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- -
35、 14 - - fclose(fp); /*关闭文件 */ printf(成功 !n); /* 返回成功信息 */ void main() /* 主函数 */ int n=0; for(;) switch(menu_select() /*选择判断 */ case 1: printf(ttt 输入记录: n); /*输入若干条记录 */ n=Input(stu,n); break; case 2: printf(ttt 显示所有记录: n); /*显示所有记录 */ Display(stu,n); break; case 3: printf(ttt 排序 n); Sort_by_score(st
36、u,n); /* 按学号排序 */ printf(ttt 排序成功 !n); printf(ttt); system(pause); break; case 4: printf(ttt 添加记录 n); n=Insert_a_record(stu,n); /* 插入一条记录 */ printf(ttt); system(pause); break; case 5: printf(ttt 删除记录 n); n=Delete_a_record(stu,n); /* 按姓名查找,删除一条记录*/ printf(ttt); system(pause); break; 名师资料总结 - - -精品资料欢
37、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - 学生管理信息系统设计- - 15 - - case 6: printf(ttt 查询 n); Query_a_record(stu,n); /* 查找并显示一个记录 */ printf(ttt); system(pause); break; case 7: printf(nttt 统计结果 :n); Statistic(stu,n); /*新增功能,输出统计信息*/ printf(ttt); system(pa
38、use); break; case 8: printf(ttt 从正文中添加记录: n); n=AddfromText(stu,n); /*新增功能,输出统计信息*/ break; case 9: printf(ttt 将所有记录存储到文件中n); WritetoText(stu,n); /*循环写入数据 */ printf(ttt); system(pause); break; case 0: printf(ttt 谢谢使用,再见 !n); /* 结束程序 */ printf(ttt); system(pause); exit(0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -