基于c语言的学分管理系统

上传人:y**** 文档编号:58959034 上传时间:2022-03-01 格式:DOC 页数:15 大小:60KB
收藏 版权申诉 举报 下载
基于c语言的学分管理系统_第1页
第1页 / 共15页
基于c语言的学分管理系统_第2页
第2页 / 共15页
基于c语言的学分管理系统_第3页
第3页 / 共15页
资源描述:

《基于c语言的学分管理系统》由会员分享,可在线阅读,更多相关《基于c语言的学分管理系统(15页珍藏版)》请在装配图网上搜索。

1、唐山学院课程设计1引言现今大学对学生成绩管理以及学生水平评定过程中,不仅依靠学生分数,而且把各个科目的掌握情况通过学分来反映,众所周知,大学人数众多, 单靠人工在纸质介质上记录,既浪费资源又不方便管理,并且错误率高,学分管理系统就是基于现今大学在学生成绩管理过程中采用学分制,应运而生的计算机数据管理系统,对在校生进行学分数据录入、修改、删除、查找、排序以及对学分得分的初步统计,并存储学生学分数据的计算机数据管理系统.利用学分管理系统可以有效的帮助管理者,来管理学生学分数据,并能够了解各个班级学生学分完成情况,从而节约了管理过程中的人力物力,并且存贮方便、准确。学生学分管理系统是运行于计算机系统

2、下的应用软件,主要用于对学生的学号、姓名以及各项学科学分进行录入、删除、修改、查询、排序、统计、存盘等操作,为学校的教师和学生提供了一个对学生学分进行管理和查看的平台,给用户提供了一个简单友好的用户接口,主要任务如下:1。1查看所有学生信息根据菜单提示,选择该功能,能够逐条显示全部学生学分记录1。2输入学生记录用户根据菜单提示选择输入学生记录选项,进行有关学生的学号、姓名、班级、基础课学分、专业课学分、选修课学分、人文类课学分以及实验课学分的录入。可一次性输入多条学生的学分信息记录.1。3删除学生记录根据提示,用户输入要进行删除学生的学号,如果在不存在该学号,则显示没有找到该学生;如果在文件中

3、有该学号的信息存在,则将该学号所对应的姓名、学号、班级、各科学分等在对应文件中加以删除.1。4修改学生记录根据提示,用户输入要进行修改学分记录的学生的学号,如果在文件中不存在该学号,则显示没有找到该学生;如果在文件中有该学生的信息存在,则将提示用户选择要修改的某课程,当用户选择某课程的代码后,则将显示你所要修改的课程。然后提示用户选择是否继续进行修改操作。1.5查询学生信息查询学生信息,分为根据学号查询和根据班级查询两个具体需求,菜单选项分别提示用户输入要查询学生信息的学号或班级,如果在磁盘文件中有对应的输入信息,则提示用户已找到,并逐项列出对应查找到的学生学分状况。1。6根据学号排序学生记录

4、该项功能根据学生的学号项进行排序,以便用户对学生学分状况有较为直观方便的了解,并能够让学号有规律排列的学生项,在显示时集中出现,让浏览者更加清楚明白。1.7统计学生学分完成情况该项是统计各班学生的学分完成情况,可以很方便了解该班学生的学习水平。2总体设计进行总体设计,以比较抽象的方式概括的确定系统如何完成预定的任务,进而确定组成系统的每个子程序的结构,从而将一个大的程序按功能分割成一些模块,是每个模块具有功能单一、结构清晰、接口简单易于理解的小程序,并且确定各个函数之间的调用关系。本系统主要应用结构化的设计思想,实现学生学分的输入、删除、修改、查询以及浏览等管理功能,各主要模块的数据均存储在文

5、件中,因此包含对文件的读、写等基本操作。在软件开发过程中应用了高级语言程序设计中的基本控制结构,如选择、循环、顺序等结构。系统的设计方法是结构化设计方法,采用C语言进行开发。系统功能结构图,如图1所示。退出系统查看所有学生信息输入学生记录删除学生记录修改学生记录根据学号查询学生记录根据班级查询学生记录根据学号排序学生记录统计学生学分完成情况学分管理程序图1 系统结构图3详细设计本系统采用主函数调用子函数的设计方法,先整体在逐步细化的过程,具体方法如下:在主函数前,进行子函数声明,如下:void menu();/菜单函数void to_menu();/返回菜单函数void view_data()

6、;/查看所有学生信息void save_data();/保存数据void add_data();/输入学生数据void read_data();/读取数据void delete_data();/删除数据void edit_data();/修改数据void query_data_no();/查找(按学号)void query_data_clas();/查找(按班级)void sort_data_no();/排序(学号)void tongji();/统计某班学生学分完成情况3。1主函数设计编写主函数,主函数运行时,先调用void read_data()函数,将数据从文件读取到结构体数组中,再调用菜

7、单函数void menu(),显示菜单选择项,设计一个while循环,让函数进入循环,设计switch函数,对菜单各项功能进行选择,使各项功能能够运行,最后退出循环,调用to_menu()函数,返回主菜单.main() int fun; read_data(); menu(); while(1) printf(”请输入功能号0-8:”,fun); scanf(d,fun); switch(fun) case 0: break; / 退出 case 1: view_data();break; / 查看所有学生信息 case 2: add_data(); break; / 输入学生记录 case

8、3: delete_data();break; / 删除学生记录 case 4:edit_data();break; / 修改学生记录 case 5: query_data_no();break; / 查询(学号) case 6:query_data_clas();break; / 查询(班级) case 7:sort_data_no(); break; / 排序(学号) case 8:tongji();break; /统计某班学生学分完成情况 default:printf(输入错误!”);break; if(fun=0) break; to_menu(); 3。2子函数设计3.2。1菜单函数

9、设计菜单函数首先运行库函数system(cls)进行清屏,然后运行各个printf语句,显示主菜单,如图2所示.图2 系统主菜单 3。2.2返回主菜单函数设计设计字符c1,c2,用c1来接受第一次输入的回车,然后再次输入回车时,调用函数menu(),返回主菜单,来实现各次操作完成后返回主菜单的任务。3.2。3查看所有学生信息函数设计设计for循环,定义i=0,学生总数为dd.count,利用for循环,可以显示所有学生已经记录的信息。如图3所示:图3 查看所有学生信息3.2.4数据从结构体数组保存到文件的函数设计创建文件data.txt,利用for循环,把数据逐个写入文件。3。2。5输入学生记

10、录函数设计根据printf语句提示,逐个输入学号、姓名、班级,调用库函数strcpy(),把各个输入项,拷贝到数组中,再对各项分数进行赋值,如果大于最大值,则显示最大值,设计成循环模式,末尾提示是否继续添加数据,利用break终止循环,最后存盘,退出程序,显示主菜单。输入学号为106的学生信息后如图4所示.图4 输入学生信息3。2.6删除学生记录函数设计设计for循环以及库函数strcmp(),把输入的学号,跟已有的学号进行对比,如果没有相同的学号,则提示没有找到该学生,如果找到相同的学号,则把该学号以后的数据向前移动一位,再把学生总数减一,实现删除学生。删除过程如下图5和图6所示。图5 输入

11、要删除的学生图6 删除后显示3。2。7修改学生记录函数设计根据printf语句提示,输入要修改的学生的学号,设计for循环和库函数strcmp,对输入学号进行查找,如果没有查找到,显示没有找到该学生,如果能够查找到给学生,则进一步提示输入学生的姓名、班级,然后选择要修改的学生记录项,最后提示,是否继续录入,退出后可返回主菜单。修改过程如下图7和图8所示。图7 编辑学生信息窗口图8 修改学生信息完成3。2。8查询学生记录函数设计查询学生记录分为,根据学生学号查询和根据班级查询该班所有学生的成绩,设计for循环和调用ctrcmp()函数,把要查询的结果进行显示,如果没有找到与输入匹配的字符,则显示

12、没有找到该班级或没有找到该学生。查询显示如下图,根据学号查询如图9所示,根据班级查询如图10所示。图9 根据学号查询学生信息图10 根据班级查询学生信息3.2.9排序函数设计设计while循环,用for循环和库函数strcmp将学号依次比较,然后用冒泡排序法将学号数据由小到大排列,并且各数据交换,完成排序。排序结果如下图11所示。图11 根据学号排序结果3.2.10统计函数设计输入要统计的班级号,调用strcmp函数,查找相同班级号的学生数据,再设计for循环并调用strcmp函数,把差找出的学生数据,与要求完成的学分标准进行对比,统计出符合要求和不符合要求的学生个数,最后显示。统计结果如下图

13、12所示。图12 根据班级统计结果4总结本系统可以完成学生学分的录入、查询、修改、删除、排序以及班级总体水平的统计功能,但是对于系统的访问权限设置,访问途径(网络访问还是单机使用)等功能,还没有提出解决的方案,在这些问题上还有待于对系统的进一步开发完善。学分管理系统是介于学生管理者和学生之间的一个数据库平台,他让数据管理者可以方便的录入修改学生成绩,在管理过程中可以节省时间,增加工作效率,假如学生可以通过网络来进行查询,就可以避免学分改动而引发的矛盾,同时也可以给学生带来方便,因此在访问途径上可以设置为单机服务器管理,网络访问的数据库模式,来为学生和学校之间提供一个信息查询的平台。本系统的开发

14、过程,主要利用了for循环、switch循环、库函数strcmp与strcpy等,在排序函数设计时,略显繁琐,有待于使用者在使用时,提出宝贵的意见和建议。通过对本程序的开发,让我了解到一个完整系统的开发过程,将一个大的工程问题可以细化到各个模块,让每个模块可以独立去完成各自的功能,最后用函数之间的调用来解决程序开发的全部问题,让我在以后开发程序的道路上更加拥有信心。参考文献1 赵启兰库存管理M北京:高等教育出版社,20052 谭浩强,张基温C语言程序设计教程(第3版)M北京:高等教育出版社,20063 黄明、梁旭、万洪莉C语言课程设计M北京:电子工业出版社,20064 郭宁,郑小玲管理信息系统

15、M北京:人民邮电出版社,20065 赵池龙,杨林,陈伟实用软件工程M北京:电子工业出版社,2006附 录#include stdio.h#include io。hinclude define MAX 60struct student char no10; / 学号 char name50; / 姓名 char clas5; / 班级 int score5; / 学分;struct data int count; / 当前学生数组中学生的个数 struct student stuMAX; / 学生数组 dd;/子函数声明void menu();/菜单函数void to_menu();/返回菜单函

16、数void view_data();/查看所有学生信息void save_data();/保存数据void add_data();/输入学生数据void read_data();/读取数据void delete_data();/删除数据void edit_data();/修改数据void query_data_no();/查找(按学号)void query_data_clas();/查找(按班级)void sort_data_no();/排序(学号)void tongji();/统计某班学生学分完成情况/ 主函数main() int fun; read_data(); menu(); whil

17、e(1) printf(请输入功能号08:,&fun); scanf(”d”,fun); switch(fun) case 0: break; / 退出 case 1: view_data();break; / 查看所有学生信息 case 2: add_data(); break; / 输入学生记录 case 3: delete_data();break; / 删除学生记录 case 4:edit_data();break; / 修改学生记录 case 5: query_data_no();break; / 查询(学号) case 6:query_data_clas();break; / 查询

18、(班级) case 7:sort_data_no(); break; / 排序(学号) case 8:tongji();break; /统计某班学生学分完成情况 default:printf(输入错误!”);break; if(fun=0) break; to_menu(); void menu()/显示主菜单*/ system(”cls”);/清屏 printf(n); printf(”ttn”); printf(tt n”); printf(tt 学分管理系统 n); printf(”tt n”); printf(tt 0 退出 1 查看所有学生信息 n”); printf(”tt n”)

19、; printf(tt 2 输入学生记录 3 删除学生记录 n”); printf(tt n); printf(tt 4 修改学生记录 5 查询(学号) n”); printf(”tt n”); printf(tt 6 查询(班级) 7 排序(学号) n); printf(tt n”); printf(tt 8统计某班学生学分完成情况 n”); printf(”tt n); printf(”ttnn);void to_menu()/ 等待用户按回车后回到主菜单 char c1,c2; printf(”nnn按回车键返回主菜单.”); scanf(c%c,&c1,c2);/第一个字符吸收上次的确

20、认回车键 menu();void view_data()/ 查看所有学生信息 int i; printf(学号t姓名t 班级t 基础课t 专业课 选修课 人文类课 实验课n); printf(n-n”); for(i=0;idd。count;i+) printf(%st %st st %dt dt dt dt %dn,dd.stui.no,dd。stui。name,dd.stui.clas,dd。stui。score0,dd。stui.score1,dd.stui.score2,dd。stui.score3,dd。stui.score4);void save_data()/ 将数据从结构体数组

21、保存到文件中 FILE fp;/文件指针 int i,k; k=dd。count; fp=fopen(dada。txt,w);/文件存储位置:当前文件夹 fwrite(&k,sizeof(int),1,fp); for(i=0;i50) dd.stuk.score1=50; else dd。stuk。score1=a; printf(n请输入选修课学分(0-24):”); scanf(d”,&a); if(a24) dd.stuk.score2=24; else dd.stuk。score2=a; printf(”n请输入人文课学分(08):); scanf(”d”,a); if(a8) dd

22、.stuk。score3=8; else dd。stuk。score3=a;; printf(”n请输入实验课学分(020):”); scanf(%d,a); if(a20) dd.stuk。score4=20; else dd。stuk。score4=a; dd.count+; printf(nn继续添加学生信息1yes 0no:); scanf(d”,&b); if(b=0) break; save_data();void read_data()/ 将数据从文件读到结构体数组中 FILE *fp; int i,k; struct student st; k=0; if(access(”da

23、da。txt,0)=-1) / 如果文件不存在 fp=fopen(”dada.txt”,”w); fwrite(&k,sizeof(int),1,fp); fclose(fp); fp=fopen(”dada.txt”,r); fread(&k,sizeof(int),1,fp); dd。count=k; for(i=0;ik;i+) fread(&st,sizeof(struct student),1,fp); strcpy(dd。stui。no,st。no); strcpy(dd。stui.name,st。name); strcpy(dd.stui。clas,st.clas); dd。st

24、ui。score4=st。score4; dd.stui.score3=st.score3; dd。stui.score2=st.score2; dd。stui.score1=st.score1; dd。stui。score0=st.score0; fclose(fp);void delete_data()/ 删除学生记录 int i,k,j; char no10; printf(”n请输入要删除学生的学号:); scanf(”%s,no); k=1; for(i=0;idd.count;i+) if(strcmp(dd.stui.no,no)=0) k=i; break; if(k=-1)

25、printf(nn没有找到该学生(学号s)!,no); else for(j=k;jdd。count1;j+)dd.stuj=dd.stuj+1; save_data(); printf(”nn删除学生(学号-s)记录成功!,no);dd。count-; void edit_data()/ 修改学生记录 struct student st; int i,k,a,b,select; char no10; printf(n请输入要编辑学生的学号:); scanf(”s,no); k=1; for(i=0;i50) dd。stuk.score0=50; else dd.stuk。score0=a;b

26、reak; case 2:printf(”n请输入专业课学分(050):); scanf(”d,&a); if(a50) dd。stuk。score1=50; else dd.stuk。score1=a;break; case 3:printf(n请输入选修课学分(0-24):); scanf(”d,&a); if(a24) dd.stuk.score2=24; else dd。stuk。score2=a;break; case 4:printf(”n请输入人文课学分(0-8):); scanf(”%d,a); if(a8) dd.stuk.score3=8; else dd.stuk。sco

27、re3=a;break; case 5:printf(n请输入实验课学分(0-20):); scanf(%d”,a); if(a20) dd.stuk.score4=20; else dd.stuk.score4=a;break; printf(”nn继续修改学生信息1-yes 0no:); scanf(%d”,&b); if(b=1) edit_data(); else save_data(); printf(”nn编辑学生记录(学号s)成功!,no); void query_data_no()/ 查询(学号) int i,k; char no10; printf(n请输入要查询学生的学号:

28、); scanf(”%s”,no); k=-1; for(i=0;idd。count;i+) if(strcmp(dd.stui.no,no)=0) if(k=-1) printf(”nn学号t姓名t班级t基础课t专业课t选修课t人文类课t实验课); printf(n-n”); k=i; printf(%st%ststdt%dt%dt%dt%dn,dd.stui。no,dd.stui.name,dd。stui.clas,dd。stui.score0,dd.stui.score1,dd.stui。score2,dd。stui。score3,dd.stui.score4); if(k=-1) pr

29、intf(”nn没有找到该学生(学号s)!,no); void query_data_clas()/ 查询(班级) int i,k; char clas10; printf(n请输入要查询学生的班级:”); scanf(”s”,clas); k=1; for(i=0;idd。count;i+) if(strcmp(dd.stui。clas,clas)=0) if(k=-1) printf(”nn学号t姓名t班级t基础课t专业课t选修课t人文类课t实验课”); printf(n-n”); k=i; printf(”%stststdtdt%dt%dtdn”,dd.stui.no,dd.stui。n

30、ame,dd。stui.clas,dd.stui。score0,dd。stui。score1,dd。stui。score2,dd.stui。score3,dd.stui。score4); if(k=-1) printf(nn没有找到该班级-s!”,clas); void sort_data_no()/ 排序(学号) int i,k; struct student tmp; k=dd.count-1; while(k0) for(i=0;i0)/最大的放末尾 strcpy(tmp.no,dd。stui.no); strcpy(tmp。name,dd。stui.name);strcpy(tmp.c

31、las,dd.stui.clas); tmp。score4=dd。stui。score4;tmp.score3=dd.stui。score3;tmp。score2=dd。stui.score2;tmp。score1=dd.stui。score1;tmp.score0=dd.stui.score0; strcpy(dd.stui。no,dd。stui+1。no); strcpy(dd。stui.name,dd。stui+1.name); strcpy(dd。stui.clas,dd。stui+1.clas); dd。stui.score4=dd.stui+1.score4;dd.stui.sco

32、re3=dd.stui+1。score3;dd.stui.score2=dd.stui+1。score2;dd.stui。score1=dd。stui+1.score1;dd.stui。score0=dd。stui+1。score0; strcpy(dd。stui+1.no,tmp.no); strcpy(dd。stui+1。name,tmp.name); strcpy(dd。stui+1.clas,tmp.clas); dd.stui+1.score4=tmp.score4;dd。stui+1.score3=tmp。score3;dd。stui+1。score2=tmp。score2;dd.

33、stui+1。score1=tmp.score1;dd.stui+1.score0=tmp。score0; k-; save_data(); printf(”nn排序成功!); void tongji() /统计某班学生学分完成情况*/ char clas5; int i,j=0,k=0; printf(n请输入要统计的班级:”); scanf(s,clas); for(i=0;idd.count;i+) if(strcmp(clas,dd.stui。clas)=0) j+; for(i=0;i=50dd.stui.score2=24 dd。stui。score3=8&dd。stui.score4=20) k+; printf(”n s 班中有 %d 个学生完成学分!n有 d 个学生未完成!!”,clas,k,j-k); scanf(”c); /*用于吸收上面所按下的字符*/ printf(”nn按回车键回主菜单!”); getchar(); menu();15

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!