C语言课程设计报告-学生成绩管理系统.doc_第1页
C语言课程设计报告-学生成绩管理系统.doc_第2页
免费预览已结束,剩余35页可下载查看

下载本文档

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

文档简介

c语言课程设计报告目录一、概述1二、软件需求分析1三、总体设计2四、详细设计3五、程序调试与测试8六、总结与体会8七、结束语9八、程序清单9九、参考文献3636一、概述1.程序实践题目学生成绩管理系统本系统应具有 数据维护功能(数据录入、添加、修改、删除)和数据查询功能(可按学号、姓名、性别、民族、年龄、地址、各门课程成绩等进行查询)。2.程序实践目的更深入地理解和掌握课程教学中的有关基本概念,应用基本技术解决实际问题从而进一步提高分析问题和解决问题的能力。 3.程序实践具体要求系统硬件环境:中央处理器:intel(r)pentium(r)cpu p62002.13ghz内存:2.00gb显卡:ati mobility radeon hd 5470系统软件环境:操作系统:microsoftwindowsxp专业版(32位)开发软件:microsoft visual c+ 6.0需要灵活掌握的知识点c语言的数据类型、基本结构、结构体、文件、链表、结构化、模块化设计等。从书上或网上查阅相关资料,自学具体功能中涉及的新知识。二、软件需求分析1.功能需求: 能通过密码进入系统;能进行个性化修饰,修改系统背景颜色;能对学生线性代数、英语、高等数学、c语言成绩、姓名、性别、民族、年龄、地址分别通过文件和窗口进行录入;能对学生的成绩进行修改;能对学生的成绩进行删除;能对学生的成绩进行查询;能插入新增的学生的成绩;能通过文件输出学生的所有数据;能进行总分高低排序学生信息;能对系统密码进行修改。2.性能需求:系统安全、可靠;功能齐全;操作方便、界面友好;易于维护和扩充。三、总体设计 1.整体设计思路在设计该程序时,将系统的不同功能分成若干个模块。为了确保系统的安全性,我们在系统中还加入了登陆密码模块,进入系统前先需要使用者输入系统初始密码1234。系统的每一个模块由一个函数定义,整个程序的主体是由main函数使用switch选择语句和while循环语句反复调用各个子函数,从而达到反复使用各种功能的效果。使用者可以使用数字键完成各种功能函数的调用,主要包括8个模块,分别是学生信息输入模块、 学生信息修改模块、学生信息删除模块、学生信息查询模块、学生信息插入模块、学生信息储存模块、学生信息排序模块。在程序中通过定义结构体sctstudent,结构体中包括学号inum、姓名cname20、性别csex10、民族cnationality20、年龄iage、地址caddress20、线代成绩fline、英语成绩fenglish、高数成绩fmaths、c语言成绩fclanguage、总成绩fscore、只向下一个结构体的指针sctstudent *next十一个成员。具体如下:struct sctstudent long int inum;/学号 char cname20;/姓名 char csex10;/性别 char cnationality20;/民族 int iage;/年龄 char caddress20;/地址 float fline;/线代成绩 float fenglish;/英语成绩 float fmaths;/高数成绩 float fclanguage;/c语言成绩 float fscore;/总成绩 struct sctstudent *next;2.系统总体模块结构图3.系统功能概述通过密码进入系统;通过文件和窗口录入学生线性代数、英语、高等数学、c语言成绩、姓名、性别、民族、年龄、地址各信息;修改学生成绩;删除学生信息;查询学生信息;插入新增学生信息;通过文件输出学生信息;通过冒泡排序按总分高低排序学生成绩并显示;修改系统密码;退出系统。4.个人承担的任务main函数的设计与实现从文件读取学生信息函数struct sctstudent *psctloadlink(void)和储存学生信息到文件的函数int isavelink(struct sctstudent *)的设计与实现;通过冒泡排序将学生信息输出至显示屏的函数struct sctstudent *psctsortlink(struct sctstudent *)的设计与实现;验证系统密码的函数int ipasslink(void)和修改系统密码的函数void changethepassword(void) 的设计与实现;用于美化程序界面的输出表头的函数void voutcaption(void)、输出空格函数void voutspace(int n)、改变程序界面颜色的函数system(color f9)的设计与实现;四、详细设计1.验证系统密码的函数int ipasslink(void)2.从文件读取学生信息函数struct sctstudent *psctloadlink(void) 3.主函数main()4. 通过冒泡排序将学生信息输出至显示屏的函数struct sctstudent *psctsortlink(struct sctstudent *)5. 修改系统密码的函数void changethepassword(void) 五、程序调试与测试 1.在编程时忘记打;号,导致编译无法通过。比如:2.在头文件中定义了子函数,但是后来又忘记写进总程序里面了。有时程序编译时没有错误,但是运行的时候会停止响应。所以我觉得在以后的编程过程中,最好用什么函数就写什么函数,然后再在头文件下声明比较好。六、总结与体会 经过这次课程设计,通过对程序的编制,调试和运行,使我更好的掌握了链表基本性有关小型数据系统问题的解决方法,熟悉了各种调用的数据类型,自学了文件的操作,在调试和运行过程中使我更加的了解和熟悉程序运行的环境变量,提高了我对程序调试分析的能力和对错误的纠正能力。这次c语言的程序设计,对于我来说是一个挑战。老师教导我们:课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。通过这次课程设计我深有体会。在课程设计过程中程序编译的同时我也发现自己对知识的掌握的不足之处,使我的编程能力有了很大程度的提高,对相关函数也可以做到熟练掌握了。在做这个课程设计的时候遇到许多困难,一个小部分可能就会花掉很长时间编写修改,虽然花费了时间,但是学到了很多知识,同时通过查课本找资料,一点一点的补足学习课本知识的漏洞,真正让我体会到理论和实践的差距,通过这次课程设计,真正锻炼了我的实践能力,做到了理论和实践相结合,实践联系理论的统一。通过这次的课程设计,让我深刻意识到自己在学习中的不足,同时也找到了克服这些弱点的方法,这也是一笔很大的资源财富。在以后的学习过程中,我应该利用更多的时间去上机实验,多编写程序,相信不久后我的编程能力都会有很大的提高能设计出更多更有创新的程序或软件。在做这个学生信息管理系统时,需要用到文件的知识,而文件部分的知识这学期自己自学后才有所了解,所以将文件内信息导入系统和将系统内信息导入文件的操作并没有很完美的运行。在以后的编程学习中,我将更加努力的学习文件方面的知识以弥补整个知识体系的缺憾。七、结束语八、程序清单#include#include#include#include#include#include#define len sizeof(struct sctstudent)#define m 20 /设置密码位数为(m-1)char passwordm=1234; /设置初始密码struct sctstudent /定义学生信息结构体 long int inum;/学号 char cname20;/姓名 char csex10;/性别 char cnationality20;/民族 int iage;/年龄 char caddress20;/地址 float fline;/线代成绩 float fenglish;/英语成绩 float fmaths;/高数成绩 float fclanguage;/c语言成绩 float fscore;/总成绩 struct sctstudent *next;void vnewpause(void);void voutcaption(void);void voutspace(int);void vouttablelinea(void);void vouttablehead(void);void vshowlink(struct sctstudent *);void valter(struct sctstudent *head);void vsearch();void vsearch_by_num(struct sctstudent *temp);void vsearch_by_name(struct sctstudent *temp);int ipasslink(void);int imainmenu(void);int isavelink(struct sctstudent *);struct sctstudent *psctdeletelink(struct sctstudent *);struct sctstudent *psctgreatlink(void);struct sctstudent *psctindexlink(struct sctstudent *,int);struct sctstudent *psctloadlink(void);struct sctstudent *psctsortlink(struct sctstudent *);struct sctstudent *psctinsertlink(struct sctstudent *temp,struct sctstudent *stu);void voutspace(int n) /该函数用于输出n个空格 int i; for(i=1;i=n;i+)printf( );int ipasslink(void) /此函数用于验证密码,密码支持(m-1)位的字符 int x,n=1; system(cls); voutcaption(); printf(nn); for(;n+) if(n=3) char ch,password0m; int i=0; printf(请输入密码:); while(ch=getch()!=r & i0) i-; printf(b b);/ 密码支持退格的实现 else putchar(7); else password0i+=ch; printf(*); password0i=0; if(!strcmp(password0,password) printf(n密码正确 请继续操作n); x=1;return x; else printf(n密码错误 您还有%d次机会n,3-n); else printf(n密码均错误 无法继续操作!n); x=0; return x; system(pause);void vnewpause(void) /清空输入流并无回显暂停等待回车 int c; while ( (c = getchar() != n & c != eof ) clearerr(stdin); getchar();int imainmenu(void) /该函数用于输出主界面 system(cls);/实现清屏 voutcaption(); printf(nn); voutspace(31); printf(1.修改学生数据n); voutspace(31); printf(2.删除学生数据n); voutspace(31); printf(3.查询学生数据n); voutspace(31); printf(4.插入学生数据n); voutspace(31); printf(5.储存学生数据n); voutspace(31); printf(6.排序学生数据n); voutspace(31); printf(7.修改系统密码n); voutspace(31); printf(0.退出管理系统n); printf(nnn); voutspace(31); printf(请输入您的选项:); int temp; fflush(stdin); /用来清空输入缓存 scanf(%d,&temp); return (temp);void voutcaption(void) /此函数用于制作表头 int i; /以下用制表符制表 printf( ); for(i=1;i=35;i+)printf(); printf(n ); voutspace(24); printf(学 生 成 绩 管 理 系 统); voutspace(22); printf( ); printf(n ); for(i=1;iinum); printf(%-6s,temp-cname); printf(%-2s ,temp-csex); printf(%-3.6s ,temp-cnationality); printf(%-2d,temp-iage); printf(%17s ,temp-caddress); printf(%-4.1f ,temp-fline); printf(%-4.1f ,temp-fenglish); printf(%-4.1f ,temp-fmaths); printf(%-4.1f ,temp-fclanguage); printf(%-.1f,temp-fscore); printf(n); temp=temp-next; vouttablelinea(); printf(nnn); voutspace(34); printf(按回车键返回); vnewpause();struct sctstudent *psctgreatlink(void)/该函数用于建立单向链表并赋值,执行输入功能 system(cls); voutcaption(); printf(nn); voutspace(26); printf(请输入学生成绩,以输入学号0结束nnn); voutspace(32); struct sctstudent *head,*temp1,*temp2,*temp3; head=null; temp1=(struct sctstudent *)malloc(sizeof(struct sctstudent); printf(请输入学生学号:); fflush(stdin);/清空缓冲区,为了确保不影响后面的数据读取 scanf(%ld,&temp1-inum); if(temp1-inum!=0) voutspace(32); printf(请输入学生姓名:); scanf(%s,temp1-cname); voutspace(32); printf(请输入学生性别:); scanf(%s,temp1-csex); voutspace(32); printf(请输入学生民族:); scanf(%s,temp1-cnationality); voutspace(32); printf(请输入学生年龄:); scanf(%d,&temp1-iage); voutspace(32); printf(请输入学生地址:); scanf(%s,temp1-caddress); voutspace(32); printf(请输入线代成绩:); scanf(%f,&temp1-fline); voutspace(32); printf(请输入英语成绩:); scanf(%f,&temp1-fenglish); voutspace(32); printf(请输入高数成绩:); scanf(%f,&temp1-fmaths); voutspace(32); printf(请输入c语言成绩:); scanf(%f,&temp1-fclanguage); voutspace(32); temp1-fscore=temp1-fline+temp1-fenglish+temp1-fmaths+temp1-fclanguage; while(temp1-inum!=0) if(head=null)head=temp1; temp2=(struct sctstudent *)malloc(sizeof(struct sctstudent); temp1-next=temp2;/前一节点的后继指针指向新开辟的节点 temp3=temp1;/保留住前一节点的指针 temp1=temp2;/方便后面的循环 system(cls); voutcaption(); printf(nn); voutspace(26); printf(请输入学生成绩,以学号0结束nnn); voutspace(32); printf(请输入学生学号:); scanf(%ld,&temp1-inum); if(temp1-inum!=0) voutspace(32); printf(请输入学生姓名:); scanf(%s,temp1-cname); voutspace(32); printf(请输入学生性别:); scanf(%s,temp1-csex); voutspace(32); printf(请输入学生民族:); scanf(%s,temp1-cnationality); voutspace(32); printf(请输入学生年龄:); scanf(%d,&temp1-iage); voutspace(32); printf(请输入学生地址:); scanf(%s,temp1-caddress); voutspace(32); printf(请输入线代成绩:); scanf(%f,&temp1-fline); voutspace(32); printf(请输入英语成绩:); scanf(%f,&temp1-fenglish); voutspace(32); printf(请输入高数成绩:); scanf(%f,&temp1-fmaths); voutspace(32); printf(请输入c语言成绩:); scanf(%f,&temp1-fclanguage); temp1-fscore=temp1-fline+temp1-fenglish+temp1-fmaths+temp1-fclanguage; else temp3-next=null;/前节点的后继指针为空 ,链表结束于前节点 head=psctindexlink(head,0);/直接对输入链表进行排序 free(temp1);/释放新开辟的未用节点,节省内存开销 return head;void valter(struct sctstudent *head) /修改学生信息的功能函数定义 struct sctstudent *p1,*p2; unsigned int cho,k,n=0; long int inum; system(cls); voutcaption(); printf(nn); if (head = null) /对空链表的处理 printf( 没有学生信息,结束修改n ); printf(按回车键返回); vnewpause(); return; printf( 请输入需要修改的学生学号: ); while(!scanf(%ld,&inum) /接受用户输入的学号并且进行查错 printf( 输入学号有误,请重新输入: ); fflush(stdin); do p2 = p1 = head; while(p1-inum != inum) /查找学生学号 if (p1-next = null) break; p2 = p1; p1 = p1-next; if (p1-inum = inum) /查找成功 printf( 已找到该学生,该学生的信息为: n); system(cls); voutcaption(); printf(nn); vouttablehead(); printf(%-ld ,p1-inum); printf(%-6s,p1-cname); printf(%-2s ,p1-csex); printf(%-3.6s ,p1-cnationality); printf(%-2d,p1-iage); printf(%17s ,p1-caddress); printf(%-4.1f ,p1-fline); printf(%-4.1f ,p1-fenglish); printf(%-4.1f ,p1-fmaths); printf(%-4.1f ,p1-fclanguage); printf(%-.1f,p1-fscore); printf(nnn); voutspace(31); n= 0; do if (n= 0) /开关,当第一次循环时 n=0 执行 if 语句 printf( 选择修改的内容n); else printf( 序号输入错误,请重新选择n); n= 1; /打开开关,以在以下操作用户输入序号超出范围时控制上面的分支语句,进而可以更好地向用户提示信息 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( 9.高数成绩n); printf( 10.c语言成绩n); printf( 11.总成绩n); printf( 12.全部n); printf( 请选择序号: ); fflush(stdin); while(!scanf(%u,&cho) /接受序号并查错 printf( 输入序号有误,请重新输入: ); fflush(stdin); while(cho 12| cho inum) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 2: printf( 请输入该学生改正的姓名信息: ); while(!scanf(%s,p1-cname) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 3: printf( 请输入该学生改正的性别信息: ); while(!scanf(%s,p1-csex) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 4: printf( 请输入该学生改正的民族信息: ); while(!scanf(%s,p1-cnationality) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 5: printf( 请输入该学生改正的年龄信息: ); while(!scanf(%d,&p1-iage) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 6: printf( 请输入该学生改正的地址信息: ); while(!scanf(%s,p1-caddress) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 7: printf( 请输入该学生改正的线代成绩信息: ); while(!scanf(%f,&p1-fline) printf( 输入改正信息有误,请重新输入: ); fflush(stdin); break; case 8: printf( 请输入该学生改正的英语成绩信息: ); while(!scanf(%f,&p1-fenglish) printf( 输

温馨提示

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

评论

0/150

提交评论