C语言课设报告——学生学分管理_第1页
C语言课设报告——学生学分管理_第2页
C语言课设报告——学生学分管理_第3页
C语言课设报告——学生学分管理_第4页
C语言课设报告——学生学分管理_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1、HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程实训报告课设题目: 学生学分管理程序 专 业: 电子信息工程 班 级: 姓 名: 张扬 成 绩: 完成日期: 2013年6月1日2013年6月18日 指导教师: 目录1.课程实训要求32.需求分析3 2.1要求3 2.2任务描述4 2.3运行环境4 2.4开发工具43.总体设计5 3.1系统流设计5 3.2系统模块设计54.主要模块流程图6 1.查询学分流程图6 2.信息修改流程图65.运行结果7 5.1主菜单界面7 5.2信息读取及浏览8 5.3学生信息查找9 5.4班级信息查找10 5.5修

2、改程序115.6排序125.7删除记录136.测试程序及结果147.问题与不足168.编程体会169.程序源代码1710.参考文献5711.用户使用手册571程序实训目的1) 通过课程实训,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程实训,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3) 通过课程实训,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程实训,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过

3、课程实训,加强了自己的程序分析能力。2.需求分析2.1要求1) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程实训题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡

4、需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) C语言课程实训报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述此系统以学生学分信息为背景,提供对学生学分信息的录入、编辑、排序、统计等功能。假定每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8学分和实验性课程20学分才能够毕业。因此在管理学分

5、时,要考虑每个学分所属于的课程类别。 具体功能实现如下:1)信息录入:录入某位学生的学分;2)个人信息查询:给点学号,显示某位学生的学分完成情况;3)班级信息查询:给定某个班级的班号,显示该班所有学生的学分完成情况;4)个人信息修改:某位学生的学号,修改该学生的学分信息;5)排序:按照某类课程的学分高低进行排序;6)信息统计:提供一些统计各类信息的功能,如:按个人、班,按课程类别、统计当前学分完成情况题目要求按分析、设计、编码、调试和测试的软件开发过程完成这个应用程序。学分信息应该包括学号、姓名、课程类别和学分等。为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选

6、择希望进行的操作项目。每个功能操作中,不应有原则性的错误出现。对输入值用测试用例测试,不应有错误出现。界面应友好,操作应流畅。2.3运行环境WindowsXP/7系统VC+6.0编译环境2.4开发工具C语言3.总体设计3.1系统流设计本系统的功能模块如图1所示,主要有以下模块学生姓名录入程序主菜单界面学生学分信息读取学生学分信息修改学生学分信息录入学生学分信息查询班级信息查询信息统计学生学号录入学生班级录入 学生学分录入 返回基础课学分修满者专业课学分修满者选修课学分修满者人文类课程学分修满者实验性课程学分修满者 信息排序 学生信息删除3.2系统模块设计1)主菜单页面:构造函数int menu

7、e(),实现系统主菜单的显示。2)学分信息读取:构造函数void input(),实现学生学分信息的读取。3)学分信息录入:构造函数void luru(),实现学生各项信息的录入4)学分信息查询:构造函数void recreash(),实现学生学分的查询。5)班级信息查询:构造函数void chaban(),实现班级信息的程序。6)学分信息修改:构造函数void xiugai(),实现学生学分信息的修改。7)各项信息排序:构造函数void sort(),实现各项成绩的排序。8)信息统计:构造函数void tongji(),统计各项学分情况。9)信息删除:构造函数void deletinfo()

8、,实现学生信息的删除。4.主要模块流程图: 4.1查询学分流程图:开始输入学生学号输出数据是否找到是显示信息否返回主菜单4.2.信息修改流程图:修改学生姓名输入学生学号开始返回主菜单输入学生学分5.运行结果:5.1主菜单界面:输入选择,进入相应功能界面。5.2信息读取及浏览5.3学生信息查找5.4班级信息查找5.5修改信息5.6排序5.7删除记录6.程序测试及结果1.显示所有学生学分情况2.测试结果:显示结果一致7.问题与不足(1)需求分析中存在的问题与分析:该程序没有按学生姓名或班级查询和修改学生信息的功能,没有插入和删除学生信息的功能,不能重复建立学生信息,在修改或建立时没有提示学分的范围

9、,没有输入步骤的提示。(2)概要设计中存在的问题和分析:在整个程序中,语言不是很简洁,有些繁琐,程序运行效率不高,界面及操作不够完美。8.编程体会在构思如何写时加强了自己的思维能力,更加了解了c语言编程过程中应该注意的一些问题,对整个编程的过程更加熟悉,体会到了在编程过程中药严谨,要想到多方面可能出现的问题,特别是在使用指针的时候,指针控制不好的时候总是超出范围不知道只到哪里去了。在输入信息的时候也要注意,有可能会出现问题。在整个程序都编的差不多的时候,总是有一些小问题要慢慢调整,比如说排版的问题,要慢慢的调整,是输出的时候能够对齐,还有要注意当输入不常规时程序有时就会死掉或者结果不正常,这时

10、候就要回过头来查找编程的时候出现的漏洞。特别是在编程过程中总是会出现编译对了,但是就是运行的时候不通,这时候就不知道是什么地方出了问题,出现这种情况总是在逻辑上出现了错误,但是不管自己怎么看都觉得是没有错的,通过编写程序也锻炼了我们的逻辑思维能力。9.程序源代码#pragma comment(lib,vfw32.lib)#include#include#include#include#include#define LEN sizeof(struct students)#define N 10struct students /声明一个结构体类型struct studentchar name20;

11、 /定义学生姓名char no20; /定义学生学号char classes10; /定义学生班级号int zy; int xuanxiu; int renwen; int shiyan; int jichu; int choice; struct students *next;STU;struct students *head=NULL,*p1,*p2,*p3,*p;struct studentchar name120;char no120; char classes110;int zy1;int xuanxiu1;int renwen1;int shiyan1;int jichu1; st

12、ruct student stud1120; int flage=0,scort10;struct students *sort1(struct students *head);struct students *sort2(struct students *head);struct students *sort3(struct students *head);struct students *sort4(struct students *head);struct students *sort5(struct students *head);void input();void luru();vo

13、id recreash();void sort();void chaban();void xiugai();void tongji();int menue();int menu1();void deletinfo();void exit0();intwriteinfo_flag=0;void save();int main()void input();for(;)switch(menue() case 1: system(cls); input();break;case 2: system(cls); luru();break;case 3: system(cls); recreash();b

14、reak;case 4: system(cls); chaban();break;case 5: system(cls); xiugai();break;case 6: system(cls); sort();break;case 7: system(cls); tongji();break;case 8: system(cls); deletinfo();break;case 0: system(cls); exit0();return 0;default : fflush(stdin);getchar();printf(n 选择错误,请正确输入你的选择(07),:n);printf(n 按

15、任意键返回.n);fflush(stdin);getch();system(cls); return 0;int menue() int m;printf(n); printf( 张扬 n);printf(指导老师:张吴波 n);printf(*菜单*n); printf( 1.新建学生记录 n);printf( 2.录入学生学分 n);printf( 3.查询学生学分 n); printf( 4.查找班级记录 n);printf( 5.修改学生记录 n);printf( 6.排序 n);printf( 7.统计各类信息 n);printf( 8.删除学生记录 n);printf( 0.退出(

16、任何情况下按Ctrl+C 退出程序) n);printf(n);printf(n 输入你的选择(07):n);scanf(%d,&m);return m; void luru()int n=0;p1=head;if(p1!=NULL)while( p1-next!=NULL)p1=p1-next;printf(nn 请输入你要录入的信息:n);p2=malloc(sizeof(struct students);/开辟一个新单元p2-next=NULL;scanf(%s%s%s%d%d%d%d%d,p2-name,p2-no,p2-classes,&p2-zy,&p2-xuanxiu,&p2-r

17、enwen,&p2-shiyan,&p2-jichu);if(p1!=NULL)p1-next =p2;elsehead=p2;p2-next=NULL;printf(n1项信息输入完毕,按任意键返回.n);system(pause);system(cls);/清屏writeinfo_flag=1;/清除保存记录标志return;void input()/此函数从文件夹中读取文件/FILE *fp;if(fp=fopen(data1.txt,r)=NULL)printf(connot open this file:n);exit(0);head=p1=(struct students *)ma

18、lloc(LEN); p1-next =NULL;while(!feof(fp) fscanf(fp,%s %s %s,p1-no,p1-name,p1-classes);fscanf(fp,%d,&p1-zy); fscanf(fp,%d,&p1-renwen);fscanf(fp,%d,&p1-shiyan);fscanf(fp,%d,&p1-jichu);fscanf(fp,%d,&p1-xuanxiu);p2=(struct students *)malloc(LEN); p1-next =p2;p3=p1;p1=p2;p1-next =NULL;free(p2); p3-next=N

19、ULL;fclose(fp);printf(信息输入完成输入信息如下:n);p1=head;printf(姓名t学号tt班级 专业课 选修课 人文类 实验 基础课n);while(p1!=NULL) printf(%st%st%st%dt%dt%dt%dt%dn,p1-name,p1-no,p1-classes,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,p1-jichu);p1=p1-next;printf(按任意键返回:nn);getch();system(cls);return ;void recreash()char no11;p1=head;if(p1=

20、NULL)printf(该链表未被建立:n);printf(输入任意一个字符退出:n);getch();system(cls);return ;printf(请输入所查学生的学号:n);fflush(stdin);gets(no);fflush(stdin);while(p1!=NULL)if(strcmp(p1-no,no)=0)printf(姓名t学号tt班级t专业课t选修课t人文类t实验t基础课tn);printf(%st%st%st%dt%d%t%dt%dt%d,p1-name,p1-no,p1-classes,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,

21、p1-jichu);break;elsep1=p1-next;if(p1=NULL)printf(该学生信息不存在:n);fflush(stdin);printf(nnn按任意键返回:n);getch();system(cls);void deletinfo()char no11,y;p1=head;if(p1=NULL)printf(该链表未被建立:n);printf(输入任意一个字符退出:n);getch();system(cls);return;printf(请输入需要删除的学生的学号:n);fflush(stdin);gets(no);fflush(stdin);for(p1=head

22、;p1!=NULL;)int flag=0;p2=p1;if(p1=head)if(strcmp(p1-no,no)=0)printf(姓名tt学号t班级t专业课t选修课t人文类t实验t基础课tn);printf(%st%st%st%dt%d%t%dt%dt%dnn,p1-name,p1-no,p1-classes,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,p1-jichu);break;p1=p1-next;if(strcmp(p1-no,no)=0)printf(姓名tt学号t班级t专业课t选修课t人文类t实验t基础课tn);printf(%st%st%st

23、%dt%d%t%dt%dt%dnn,p1-name,p1-no,p1-classes,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,p1-jichu);flag=1;if(flag=1)break;dofflush(stdin);printf(tt确认删除?Y/N:);scanf(%c,&y);fflush(stdin);if(y=Y|y=y)break;if(y=N|y=n)return;while(!(y=Y|y=y|y=N|y=n); if(p2=head&p1=head)head=p2-next;free(p2);else/*/p2-next=p1-next

24、;free(p1);printf(删除成功!n);printf(n 按任意键返回.n);fflush(stdin);getch();system(cls);save();return ;void exit0() if(flage=1) input(); p1=head; while( p1!=NULL) p2=p1-next; free(p1); p1=p2; printf(nnnnnnntttt谢谢使用 再见!n);printf(nnnnn);void chaban()char d12=0;int n,i;printf(nnnnnnnttt请输入班号: );fflush(stdin);get

25、s(d);fflush(stdin);p1=head;printf(姓名tt学号t班级t专业课t选修课t人文类t实验t基础课tn);while(p1!=NULL) if(strcmp(d,p1-classes)=0)n=1; -no,p1-classes,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,p1-jichu);printf(%st%st%st%dt%d%t%dt%dt%dnn,p1-name,p1/ for(i=0;iname,p1-no,p1-classes,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,p1-jichu);p

26、1=p1-next;if(n=0)printf(nnnnttt没有该班的学生!);printf(按任意键返回!n);getch();system(cls);return ;void xiugai()char no20;int i;if(head=NULL) fflush(stdin);printf(n学生信息数据库为空,不能修改,按任意键将返回:n);fflush(stdin);getch();system(cls); return;p1=head;printf(nn请输入要修改记录的学生号:n);fflush(stdin);gets(no);fflush(stdin);while(strcm

27、p(no,p1-no )!=0 & p1-next!=0)p1=p1-next ;if(strcmp(no,p1-no )=0) strcpy(p1-no,no);printf(nn 请输入该该学生的姓名:n);fflush(stdin);scanf(%s,p1-name);printf(nn 请输入该学生的成绩:n);scanf(%d%d%d%d%d,&p1-zy,&p1-xuanxiu,&p1-renwen,&p1-shiyan,&p1-jichu);printf(n项信息修改完毕,);elseprintf(nn找不到学生信息!);fflush(stdin);p1=head;while(p

28、1!=NULL) printf(ntt%s %s %s ,p1-no,p1-name,p1-classes);printf(%d %d %d %d %dn,p1-zy,p1-xuanxiu,p1-renwen,p1-shiyan,p1-jichu);p1=p1-next;getchar();fflush(stdin);printf(按任意键将返回:n);getch();system(cls); return;struct students *sort1(struct students *head)/int num; struct students *endpt; /struct student

29、s *p4; /struct students *p1,*p2;if(head=NULL) fflush(stdin);printf(n学生信息数据库为空,不能修改,按任意键将返回:n);fflush(stdin);getch();system(cls); return 1; p1 = (struct students *) malloc (LEN); p1-next = head; head = p1; for (endpt = NULL; endpt != head; endpt = p) for (p = p1 = head; p1-next-next != endpt; p1 = p1

30、-next) if (p1-next-jichu next-next-jichu) p2 = p1-next-next; p1-next-next = p2-next; p2-next = p1-next; p1-next = p2; p = p1-next-next; printf(姓名 学号 班级 学分n);p=head-next;while(p)printf(%st%st%st%dn,p-name,p-no,p-classes,p-jichu);p=p-next; p1 = head; /把p1的信息去掉 head = head-next; /让head指向排序后的第一个节点 free

31、(p1); /释放p1 p1 = NULL; /p1置为NULL,保证不产生“野指针”,即地址不确定的指针变量printf(按任意键继续。n); return head;/实验void sort()int jichu;int renwen;/menue1();switch(menue1()case 1: system(cls); sort1(head);break;/基础 case 2: system(cls); sort2(head);break;/实验case 3: system(cls); sort3(head);break;/人文case 4: system(cls); sort4(h

32、ead);break;/专业课case 5: system(cls); sort5(head);break;/选修case 0: system(cls); exit0();return 0;default : fflush(stdin);getchar();printf(n 选择错误,请正确输入你的选择(05),:n);printf(n 按任意键返回.n);fflush(stdin);getch();system(cls); fflush(stdin);getch();system(cls);int menue1() int m;printf(tt*菜单*n);printf(ttt1.基础n)

33、;printf(ttt2.专业n); printf(ttt3.选修n);printf(ttt4.人文n);printf(ttt5.实验n); printf(ttt0.退出(任何情况下按Ctrl+C 退出程序)n);printf(n 输入你的选择(06):n);scanf(%d,&m);return m;struct students *sort2(struct students *head)int num; struct students *endpt; struct students *p4; /struct students *p1,*p2;if(head=NULL) fflush(std

34、in);printf(n学生信息数据库为空,不能修改,按任意键将返回:n);fflush(stdin);getch();system(cls); return ; p1 = (struct students *) malloc (LEN); p1-next = head; head = p1; for (endpt = NULL; endpt != head; endpt = p) for (p = p1 = head; p1-next-next != endpt; p1 = p1-next) if (p1-next-renwen next-next-renwen) p2 = p1-next-

35、next; p1-next-next = p2-next; p2-next = p1-next; p1-next = p2; p = p1-next-next; printf(姓名 学号 班级 学分n);p=head-next;while(p)printf(%st%st%st%dn,p-name,p-no,p-classes,p-renwen);p=p-next; p1 = head; /把p1的信息去掉 head = head-next; /让head指向排序后的第一个节点 free (p1); /释放p1 p1 = NULL; /p1置为NULL,保证不产生“野指针”,即地址不确定的指针变

36、量printf(按任意键继续。n); return head;struct students *sort3(struct students *head) struct students *endpt; if(head=NULL) fflush(stdin);printf(n学生信息数据库为空,不能修改,按任意键将返回:n);fflush(stdin);getch();system(cls); return; p1 = (struct students *) malloc (LEN); p1-next = head; head = p1; for (endpt = NULL; endpt !=

37、head; endpt = p) for (p = p1 = head; p1-next-next != endpt; p1 = p1-next) if (p1-next-xuanxiu next-next-xuanxiu) p2 = p1-next-next; p1-next-next = p2-next; p2-next = p1-next; p1-next = p2; p = p1-next-next; printf(姓名 学号 班级 学分n);p=head-next;while(p)printf(%st%st%st%dn,p-name,p-no,p-classes,p-xuanxiu);p=p-next; p1 = head; /把p1的信息去掉 head = head-next; /让head指向排序后的第一个节点 free (p1); /释放p1 p1 = NULL; /p1置为NULL,保证不产生“野指针”,即地址不确定的指针变量printf(按任意键继续。n); return head;struct students *sort4(struct students *head) struct students *endpt; if(head=NULL) fflush(stdin);printf(n学生信息数据库为空,不能修改,按任意键将返回:n);fflush(s

温馨提示

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

评论

0/150

提交评论