数据结构课程设计学分管理系统方案_第1页
数据结构课程设计学分管理系统方案_第2页
数据结构课程设计学分管理系统方案_第3页
数据结构课程设计学分管理系统方案_第4页
数据结构课程设计学分管理系统方案_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、.学号14082101362015-2016 学年 第一学期数据结构程序设计课程设计报告题目:学分管理系统专业:计算机科学与技术班级:14 级(2)班姓名:王欣指导教师:陈广宏成绩:.专业 .专注.计算机学院2015 年12 月1日.专业 .专注.目录1 需求分析22 总体设计33 详细设计44 小结10致谢10参考文献10源代码11.专业 .专注.1 需求分析学生学分管理系统是运行于计算机系统下的应用软件,主要用于对学生的学号、姓名以及各项学科学分进行录入、删除、修改、查询、排序、统计、存盘等操作 ,为学校的教师和学生提供了一个对学生学分进行管理和查看的平台,给用户提供了一个简单友好的用户接

2、口,主要任务如下 :1.1 查看所有学生信息根据菜单提示 ,选择该功能 ,能够逐条显示全部学生学分记录1.2 输入学生记录用户根据菜单提示选择输入学生记录选项,进行有关学生的学号 、姓名、班级、基础课学分 、专业课学分 、选修课学分 、人文类课学分以及实验课学分的录入。 可一次性输入多条学生的学分信息记录。1.3 删除学生记录根据提示 ,用户输入要进行删除学生的学号,如果在不存在该学号 ,则显示没有找到该学生 ;如果在文件中有该学号的信息存在,则将该学号所对应的姓名、学号、班级、各科学分等在对应文件中加以删除。1.4 修改学生记录根据提示 ,用户输入要进行修改学分记录的学生的学号,如果在文件中

3、不存在该学号 ,则显示没有找到该学生 ;如果在文件中有该学生的信息存在,则将提示用户选择要修改的某课程,当用户选择某课程的代码后,则将显示你所要修改的课程 。 然后提示用户选择是否继续进行修改操作。1.5 查询学生信息.专业 .专注.查询学生信息 ,分为根据学号查询和根据班级查询两个具体需求,菜单选项分别提示用户输入要查询学生信息的学号或班级,如果在磁盘文件中有对应的输入信息 ,则提示用户已找到 ,并逐项列出对应查找到的学生学分状况。1.6 根据学号排序学生记录该项功能根据学生的学号项进行排序,以便用户对学生学分状况有较为直观方便的了解 ,并能够让学号有规律排列的学生项,在显示时集中出现 ,让

4、浏览者更加清楚明白 。1.7 统计学生学分完成情况该项是统计各班学生的学分完成情况,可以很方便了解该班学生的学习水平。2 总体设计进行总体设计 ,以比较抽象的方式概括的确定系统如何完成预定的任务,进而确定组成系统的每个子程序的结构,从而将一个大的程序按功能分割成一些模块,是每个模块具有功能单一、结构清晰 、接口简单易于理解的小程序,并且确定各个函数之间的调用关系。本系统主要应用结构化的设计思想,实现学生学分的输入 、删除、修改、查询以及浏览等管理功能,各主要模块的数据均存储在文件中,因此包含对文件的读、写等基本操作 。 在软件开发过程中应用了高级语言程序设计中的基本控制结构 ,如选择、循环、顺

5、序等结构 。系统的设计方法是结构化设计方法,采用 C 语言进行开发 。系统功能结构图 ,如图 1 所示 。.专业 .专注.图 1 系统结构图3 详细设计本系统采用主函数调用子函数的设计方法,先整体在逐步细化的过程,具体方法如下 :在主函数前 ,进行子函数声明 ,如下:void menu();/菜单函数void to_menu();/返回菜单函数void view_data();/查看所有学生信息void save_data();/ 保存数据void add_data();/输入学生数据void read_data();/读取数据void delete_data();/删除数据void edit

6、_data();/修改数据void query_data_no();/查找(按学号).专业 .专注.void query_data_clas();/查找(按班级)void sort_data_no();/排序(学号)void tongji();/统计某班学生学分完成情况3.1 主函数设计编写主函数 ,主函数运行时 ,先调用 void read_data() 函数,将数据从文件读取到结构体数组中 ,再调用菜单函数void menu() ,显示菜单选择项 ,设计一个 while 循环,让函数进入循环 ,设计 switch 函数,对菜单各项功能进行选择,使各项功能能够运行 ,最后退出循环 ,调用 t

7、o_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 3: delete_data();break; /删除学生记录case 4:edit_data();break; /修改学生记录case 5: query_data_no();b

8、reak; /查询(学号)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 菜单函数设计菜单函数首先运行库函数system(cls) 进行清屏 ,然后运行各个 printf 语句,显示主菜单 ,如图 2 所示。.专业 .专注.图 2 系统主菜单3.2.2 返回主菜单函数设计设计字符

9、c1,c2,用 c1 来接受第一次输入的回车,然后再次输入回车时 ,调用函数 menu() ,返回主菜单 ,来实现各次操作完成后返回主菜单的任务。3.2.3 查看所有学生信息函数设计设计 for 循环,定义 i=0 ,学生总数为 dd.count ,利用 for 循环,可以显示所有学生已经记录的信息。如图 3 所示:图 3 查看所有学生信息3.2.4 数据从结构体数组保存到文件的函数设计创建文件 data.txt ,利用 for 循环,把数据逐个写入文件 。3.2.5 输入学生记录函数设计根据 printf 语句提示 ,逐个输入学号 、姓名、班级,调用库函数 strcpy() ,把各个输入项

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

11、示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 等,在排序函数设计时 ,略显繁琐 ,有待于使用者在使用时 ,提出宝贵的意见和建议 。.专业 .专注.通过对本程序的开发 ,让我了解到一个完整系统的开发过程,将一个大的工程问题可以细化到各个模块,让每个模块可以独立去完成各自的功能,最后用函数之间的调用来解决程序开发的全部问题,让我在以后开发程序的道路上更加拥有信心 。致谢在这次数据结构课程设计中

15、,我的老师和同学给了我及大的帮助。特别是我的指导老师陈广宏老师,还有我的小组组长王晶的耐心帮助,在此,我对他们表示感谢 !感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同学 !参考文献1 赵启兰 库存管理 M 北京 :高等教育出版社 ,20052 谭浩强,张基温 C 语言程序设计教程 (第 3 版)M 北京 :高等教育出版社,20063 黄明、梁旭、万洪莉 C 语言课程设计 M 北京:电子工业出版社 ,20064 郭宁 ,郑小玲 管理信息系统 M 北京 :人民邮电出版社 ,20065 赵池龙,杨林,陈伟 实用软件工程 M 北京 :电子工业出版社 ,2006源代码#includ

16、e #include #include .专业 .专注.#include #define MAX 60struct studentchar no10;/学号char name50; /姓名char clas5;/班级intscore5; /学分;struct dataint count;/当前学生数组中学生的个数struct student stuMAX; /学生数组 dd;/ 子函数声明void menu();/菜单函数void to_menu();/返回菜单函数void view_data();/查看所有学生信息void save_data();/ 保存数据void add_data();

17、/输入学生数据.专业 .专注.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();while(1)printf( 请输入功能号 0-8:,&fun);scanf(%d,&fun);switch(fun)case

18、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;/查询(班级)case 7:sort_data_no(); break;/排序(学号)case 8:tongji();break;/ 统计某班学生学分

19、完成情况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(tt0退出1查看所有学生信息n);printf(tt n);printf(tt2输入学生记录3删除学生记录n);printf(tt n);printf(tt4修改学生记录5查询(学号)n);printf(tt n);printf(tt6查询(

20、班级)7排序(学号)n);printf(tt n);printf(tt8 统计某班学生学分完成情况n);printf(tt n);printf(ttnn);void to_menu()/等待用户按回车后回到主菜单char c1,c2;printf(nnn按回车键返回主菜单 .);scanf(%c%c,&c1,&c2);/第一个字符吸收上次的确认回车键menu();.专业 .专注.void view_data()/查看所有学生信息int i;printf( 学号 t姓名 t班级 t基础课 t专业课选修课人文类课实验课n);printf(n-n);for(i=0;idd.count;i+)prin

21、tf(%st%st%st%dt%dt%dt%dt%dn,dd.stui.no,,dd.stui.clas,dd.stui.score0,dd.stui.score1,dd.stui.score2,dd.stui.score3,dd.stui.score4);void save_data()/将数据从结构体数组保存到文件中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.score0=50;

22、elsedd.stuk.score0=a;printf(n请输入专业课学分 (0-50):);scanf(%d,&a);if(a50) dd.stuk.score1=50;elsedd.stuk.score1=a;printf(n请输入选修课学分 (0-24):);scanf(%d,&a);if(a24)dd.stuk.score2=24;elsedd.stuk.score2=a;printf(n请输入人文课学分 (0-8):);scanf(%d,&a);if(a8)dd.stuk.score3=8;elsedd.stuk.score3=a;printf(n请输入实验课学分 (0-20):);

23、scanf(%d,&a);if(a20)dd.stuk.score4=20;elsedd.stuk.score4=a;dd.count+;printf(nn继续添加学生信息 1-yes 0-no:);scanf(%d,&b);if(b=0) break;save_data();.专业 .专注.void read_data()/将数据从文件读到结构体数组中FILE *fp;int i,k;struct student st;k=0;if(access(dada.txt,0)=-1) /如果文件不存在fp=fopen(dada.txt,w);fwrite(&k,sizeof(int),1,fp);

24、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(,);strcpy(dd.stui.clas,st.clas);dd.stui.score4=st.score4;.专业 .专注.dd.stui.score3=st.score3;dd.stui.score2=st.score2;dd.stui.sco

25、re1=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)printf(nn没有找到该学生 (学号 -%s)!,no);elsefor(j=k;jdd.count-1;j+)dd.stuj=dd.stuj+1;save_data();pri

26、ntf(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;elsedd.stuk.score0=a;break;case 2:printf(n请输入专业课学分 (0-50):);scanf(%d,&a);if(a50) dd.stuk.score1=50;elsedd.stuk.

27、score1=a;break;case 3:printf(n请输入选修课学分 (0-24):);scanf(%d,&a);if(a24)dd.stuk.score2=24;elsedd.stuk.score2=a;break;case 4:printf(n请输入人文课学分 (0-8):);scanf(%d,&a);if(a8)dd.stuk.score3=8;elsedd.stuk.score3=a;break;case 5:printf(n请输入实验课学分 (0-20):);scanf(%d,&a);if(a20)dd.stuk.score4=20;elsedd.stuk.score4=a;

28、break;.专业 .专注.printf(nn继续修改学生信息 1-yes 0-no:);scanf(%d,&b);if(b=1)edit_data();elsesave_data();printf(nn编辑学生记录 (学号 -%s) 成功 !,no);void query_data_no()/查询(学号)int i,k;char no10;printf(n请输入要查询学生的学号:);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基础课

29、 t专业课 t选修课 t人文类课 t 实验课 );printf(n-n);k=i;printf(%st%st%st%dt%dt%dt%dt%dn,dd.stui.no,,dd.stui.clas,dd.stui.score0,dd.stui.score1,dd.stui.score2,dd.stui.score3,dd.stui.score4);if(k=-1)printf(nn没有找到该学生 (学号 -%s)!,no);void query_data_clas()/查询(班级)int i,k;.专业 .专注.char clas10;printf(n请输入要查询学生的班级:);scanf(%s,clas);k=-1;for(i=0;i0)for(i=0;i0)/最大的放末尾strcpy(tmp.no,dd.stui.no);strcpy(,);strcpy(tmp.clas,dd.stui.clas);tmp.score4=dd.stui.score4;tmp.score3=dd.stui.score3;.专业 .专注

温馨提示

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

最新文档

评论

0/150

提交评论