已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录 前言一 需求分析5二 概要设计5三 详细设计6四 调试分析10五 总结11六 评分13七 附录14前 言C语言程序设计课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了四个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘收齐后交指导老师。一需求分析: 班级档案管理系统有六十一种功能,把这11个功能做成11个子函数。在主函当数中设计一个菜单对这11个子数进行管理。来实现对整个系统的操作。根据课题的要求,每个数据的结构应当包括:学号(char)、姓名(char)、性别(char)、年龄(int)、备注(char)。 对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。最后为了以后按照处理后的顺序保存到文件中。 二概要设计: 程序的抽象数据类型的定义 数据结构:结构体类型数组 typedef struct /*定义数据结构*/ char no20;/*学号*/ char name20; /*姓名*/ char sex5;/*性别*/ int age;/*年龄*/ STUDENTS;程序的模块组成: 输入记录函数:enter(STUDENTS t)显示记录函数:list(STUDENTS t,int n) 按姓名查找显示记录函数:search(STUDENTS t,int n)删除记录函数:delete(STUDENTS t,int n)插入记录函数:add(STUDENTS t,int n)记录保存为文件函数:save(STUDENTS t,int n)从文件中读记录函数:load(STUDENTS t)按序号查找显示记录:display(STUDENTS t)按姓名排序函数:sort(STUDENTS t,int n)文件复制函数:copy()显示单条记录函数:print(STUDENTS temp)查找函数:find(STUDENTS t,int n,char *s)各个函数的主要功能: 输入函数: 随时输入数据。 菜单函数:显示系统主菜单。 显示函数: 显示所有学生的信息。 寻找函数: 方便查找所有学生的信息。 删除函数: 删除某学生的信息。 按学号排序函数: 按学号排序。 按姓名排序函数:按姓名排序插入函数: 可以插入新的信息。 保存函数: 保存好学生信息,以免丢失。课题的功能模块的划分由于是学生数据,数据多、数据结构相似的特点,很自然的会用数组实现数据的存储。该课题操纵的总体数据结构是文件类型的数据,文件的记录为结构体数据,数据库结构用文件来实现。需要存储的数据有:学生的姓名,学号,性别,年龄等。三详细设计采用C语言定义相关的数据类型: typedef struct char no20; char name20; char sex5; int age; STUDENTS; *f= *MENU*, 0. Enter record, 1. List the file, 2. Search record on name, 3. Delete a record, 4. add record , 5. Save the file, 6.Load the file, 7. display record on order, 8. sort to make new file, 9. copy the file to new file, 10. Quit;等各模块的类C码算法:寻找函数search(STUDENTS t,int n)void search(STUDENTS t,int n) char s20; int i; clrscr(); printf(please search name:nn); printf(please search no:nn); printf(please search sex:nn); printf(please search age:nn); scanf(%s,s); i=find(t,n,s); if(in-1) printf(not foundn); else print(ti); 输入函数enter(STUDENTS t)void enter(STUDENTS t) int i,n; clrscr(); /*清屏*/ printf(nplease input num n); /*提示信息*/ scanf(%d,&n); /*输入记录数*/ printf(please input record n); /*提示输入记录*/ printf(*STUDENTS*n); printf(| no | name | sex | age |n);/*输出字段标题,注意空格数*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ for (i=0;in;i+) scanf(%s%s%s%d,ti.no,,ti.sex,&ti.age); printf(|-|-|-|-|n);/*输出表格的水平线*/*输入记录*/*/* */* */* / TODO: add your code here */* */* */*/显示记录函数list(STUDENTS t,int n)void list(STUDENTS t,int n) int i; void enter(STUDENTS t); clrscr(); printf(*STUDENTS*); printf(| no | name | sex | age |n);/*输出字段标题,注意空格数*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ while(i+1)%10=0) for(i=0;i0) /*判断输出是否达到10条记录*/ break; printf(*end*n); printf(Press any key continue.n); /*提示信息*/ getch(); /*压任意键继续*/查找函数:find(STUDENTS t,int n,char *s)int find(STUDENTS t,int n,char *s) int i; for(i=0;in;i+)/*从第一条记录开始,直到最后一条*/ if(strcmp(s,)=0) /*记录中的姓名和待比较的姓名是否相等*/ return i; /*相等,则返回该记录的下标号,程序提前结结束*/ for(i=0;in;i+) if(strcmp(s,ti.no)=0) return i; for(i=0;in;i+) if(strcmp(s,ti.sex)=0) return i; for(i=0;inext)和链表尾的判断 (p= =NULL)。没有指针的移动,就很容易出现死循环。而在运行过程中不能控制。所以你就会认为是死机。如果没有链表尾的判断。就会在运行过程出现想不到的错误。如:在显示链表信息时,后面就会出现乱码。 一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。一周的程序设计和上机调试使我觉得:一个教好的程序,着眼点应该是为满足用户的需求,要使用户操作起来非常的方便而不必知道程序的原理和功能的具体实现,因此必须有一个友好的用户界面和方便使用的功能操作。我们在编程的时候应该尽量做到使程序简单,易读,用户界面应尽量做得美观,易于操作。五总结:通过C课程设计实验课使我了解到了一个程序开发的过程,虽然规模不大,但为我以后的编程学习打下了基础。在编程的过程中,我体会到了学习编程的辛苦,为了一个算法的实现而思考,为了一个小小的编译错误而花时间去寻找,这需要很大的毅力和耐心,而且要有良好的思维,这才使得我完成这个任务,也使我感到一分喜悦,毕竟自己完成了一个有模有样的程序。于此,我也发现自己的一些不足,良好的编程习惯的养成,坚定的毅力和耐心仍是我要加强的,同别人的交流也是必须的,这样才能不断使我进步。高手们往往是在日日夜夜中磨练出来的,我也要向着更高的方向前进,这是我的梦想。在这我也感谢老师对我的关怀和帮助,对于他的教学我也很满意,看到他这么大年纪还在课堂讲课,而且精神并不比我们差,我很感动。在此也提出小小的建议:在学习C的过程中我们先是以理论学习,后是进行上机实践,这也是符合客观规律的,但我认为可以把实践提前,先讲解一些预备知识(能够编出一个或几个小程序)接着就上机实践,让学生知道学的东西有什么用,怎样用,然后在原有基础上加深,譬如在原有程序上改进,增加功能,这也就涉及一些未学的东西,逼着他们自己去学,这时也可以加一些理论讲解,使学生从实践中了解自己需要学习的东西。这样使同学不会觉得学了一大堆东西不知有什么用处。以上只是我个人的意见,毕竟没有什么教学经验,在很多方面还没考虑到,希望老师参考。在设计中我们遇到了很多编程问题,最后在老师们的辛勤指导下,我们慢慢的进入状态,我们做的是学生成绩管理的设计,内容包括很多,运用的函数也是非常的复杂,经过几星期的努力,我们完成了大半个程序,但是总是有很多错误出现,有好多是些小问题,这都是我们粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,是我们最大的问题,不过,我们做好后,经过老师的讲解和改错,我们也懂得设计和运用了。同时,也让我知道了,合作的力量,如果是孤军奋战的话,我们也不能在规定时间内完成,最终达到游纫而解.计算机科学与技术系课程设计评分表课程名称: 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: (注:1此页附在课程设计报告之后;2综合成绩按优、良、中、及格和不及格五级评定。)七附录参考资料:C语言程序案例分析 人民邮电出版社C语言程序设计(第2版) 北京邮电大学出版社C程序设计(第三版) 清华大学出版社C语言程序设计案例分析 人民邮电出版社C语言实例解析精粹 人民邮电出版社源程序清单 /*头文件(.h)*/#include stdio.h /*I/O函数*/#include stdlib.h /*标准库函数*/#include conio.h#include string.h/*字符串函数*/#include ctype.h /*字符操作函数*/#define M 50 /*定义常数表示记录数*/typedef struct /*定义数据结构*/ char no20;/*学号*/ char name20; /*姓名*/ char sex5;/*性别*/ int age;/*年龄*/STUDENTS;/*以下是函数原型*/void enter(STUDENTS t); /*输入记录*/void list(STUDENTS t,int n); /*显示记录*/void search(STUDENTS t,int n); /*按姓名查找显示记录*/int delete(STUDENTS t,int n); /*删除记录*/int add(STUDENTS t,int n); /*插入记录*/void save(STUDENTS t,int n); /*记录保存为文件*/int load(STUDENTS t); /*从文件中读记录*/void display(STUDENTS t); /*按序号查找显示记录*/void sort(STUDENTS t,int n); /*按姓名排序*/void copy(); /*文件复制*/void print(STUDENTS temp); /*显示单条记录*/int find(STUDENTS t,int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*/*主函数开始*/main() int i; STUDENTS stuM; /*定义结构体数组*/ int length; /*保存记录长度*/ clrscr(); /*清屏*/ for(;)/*无限循环*/ switch(menu_select() /*调用主菜单函数,返回值整数作开关语句的条件*/ case 0:enter(stu);break;/*输入记录*/ case 1:list(stu,length);break; /*显示全部记录*/ case 2:search(stu,length);break; /*查找记录*/ case 3:length=delete(stu,length);break; /*删除记录*/ case 4:length=add(stu,length); break; /*插入记录*/ case 5:save(stu,length);break; /*保存文件*/ case 6:length=load(stu); break; /*读文件*/ case 7:display(stu);break; /*按序号显示记录*/ case 8:sort(stu,length);break; /*按姓名排序*/ case 9:copy();break; /*复制文件*/ case 10:exit(0); /*如返回值为11则程序结束*/ /*菜单函数,函数返回值为整数,代表所选的菜单项*/ /*菜单函数,函数返回值为整型,代表所选的菜单项*/menu_select() char *f= /*定义菜单字符串数组*/ *MENU*, /*菜单的标题行*/ 0. Enter record, /*初始化双链表*/ 1. List the file, /*输入数据,创建双链表*/ 2. Search record on name, /*显示所有记录*/ 3. Delete a record, /*显示单条记录*/ 4. add record , /*计算实发工资*/ 5. Save the file, /*查找记录*/ 6.Load the file, /*删除记录*/ 7. display record on order, /*插入记录*/ 8. sort to make new file, /*追加记录*/ 9. copy the file to new file, /*保存文件*/ 10. Quit;/*读取文件*/ char s80; int i; int key=0; /*记录所压键值*/ int c=0; gotoxy(1,25); /*移动光标*/ printf(press any key enter menu.n);/*压任意键进入主菜单*/ getch(); clrscr(); /*清屏*/ textcolor(YELLOW); /*设置文本颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为兰色*/ gotoxy(10,2); putch(0xda); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xc4); /*输出上边框水平线*/ putch(0xbf); /*输出右上角边框 */ for(i=3;i22;i+)/*输出左右两边的垂直线*/ gotoxy(10,i);putch(0xb3); gotoxy(54,i);putch(0xb3); gotoxy(10,22);putch(0xc0); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xc4); /*输出下边框水平线*/ putch(0xd9); /*输出右下角边框*/ window(11,3,53,21); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i8; /*对所压的键进行判断*/ gotoxy(10,i+1); textbackground(BLUE);/*设置背景颜色为蓝色*/ cprintf(%s,fi); /*输出菜单项*/ if(key=72) i=i=1?11:i-1; /*如压向上光标键,i减1,如已到第一行再上移,则到最后一行*/ if(key=80)i=i=11?1:i+1; /*如压向下光标键,i加1,如已到最后一行再下移,则到第一行*/ gotoxy(10,i+1); /*光标移动i的下一项*/ textbackground(LIGHTGREEN); /*将背景颜色设为浅绿*/ cprintf(%s,fi); /*输出菜单项*/ c=i-1; /*给代表菜单选项的整数赋值*/ textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ return c; /*返回代表菜单选项的整数值*/*查找记录*/void search(STUDENTS t,int n) char s20; /*保存待查找姓名字符串*/ int i; /*保存查找到结点的序号*/ clrscr(); /*清屏*/ printf(please search name:nn); printf(please search no:nn); printf(please search sex:nn); printf(please search age:nn); scanf(%s,s); /*输入待查找姓名*/ i=find(t,n,s); /*调用find函数,得到一个整数*/ if(in-1) /*如果整数i值大于n-1,说明没找到*/ printf(not foundn); else print(ti); /*找到,调用显示函数显示记录*/*显示指定的一条记录*/void print(STUDENTS temp) clrscr(); printf(*STUDENTS*); printf(| no | name | sex | age |n);/*输出字段标题,注意空格数*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ printf(%s%s%s%dn,temp.no,,temp.sex,&temp.age); printf(*end*n);/*查找函数,参数为记录数组和记录条数以及姓名s */int find(STUDENTS t,int n,char *s) int i; for(i=0;in;i+)/*从第一条记录开始,直到最后一条*/ if(strcmp(s,)=0) /*记录中的姓名和待比较的姓名是否相等*/ return i; /*相等,则返回该记录的下标号,程序提前结结束*/ for(i=0;in;i+) if(strcmp(s,ti.no)=0) return i; for(i=0;in;i+) if(strcmp(s,ti.sex)=0) return i; for(i=0;in;i+) if(strcmp(*s,ti.age)=0) return i; return i; /*返回i值*/*删除函数,参数为记录数组和记录条数*/int delete(STUDENTS t,int n) char s20; /*要删除记录的姓名*/ int ch=0; int i,j; printf(please deleted name:n); /*提示信息*/ scanf(%s,s);/*输入姓名*/ i=find(t,n,s); /*调用find函数*/*/* */* */* / TODO: add your code here */* */* */*/ return n; /*返回记录数*/void enter(STUDENTS t) int i,n; clrscr(); /*清屏*/ printf(nplease input num n); /*提示信息*/ scanf(%d,&n); /*输入记录数*/ printf(please input record n); /*提示输入记录*/ printf(*STUDENTS*n); printf(| no | name | sex | age |n);/*输出字段标题,注意空格数*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ for (i=0;in;i+) scanf(%s%s%s%d,ti.no,,ti.sex,&ti.age); printf(|-|-|-|-|n);/*输出表格的水平线*/*输入记录*/*/* */* */* / TODO: add your code here */* */* */*/ void list(STUDENTS t,int n) int i; void enter(STUDENTS t); clrscr(); printf(*STUDENTS*); printf(| no | name | sex | age |n);/*输出字段标题,注意空格数*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ while(i+1)%10=0) for(i=0;i0) /*判断输出是否达到10条记录*/ break; printf(*end*n); printf(Press any key continue.n); /*提示信息*/ getch(); /*压任意键继续*/*插入记录函数,参数为结构体数组和记录数*/int add(STUDENTS t,int n)/*插入函数,参数为结构体数组和记录数*/ STUDENTS temp; /*新插入记录信息*/ int i,j; char s20; /*确定插入在哪个记录之前*/ printf(please input recordn); printf(*n); printf(| no | name | sex | age |n);/*输出字段标题,注意空格数*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ scanf(%s%s%s%d,temp.no,,temp.sex,&temp.age); /*输入插入信息*/ printf(|-|-|-|-|n);/*输出表格的水平线*/ printf(please input locate name n); scanf(%s,s); /*输入插入位置的姓名*/ i=find(t,n,s); /*调用find,确定插入位置*/ for(j=n-1;j=i;j-) /*从最后一个结点开始向后移动一条*/ strcpy(tj+1.no,tj.no); /*当前记录的学号拷贝到后一条*/ strcpy(tj+1.name,); /*当前记录的姓名拷贝到后一条*/ strcpy(tj+1.sex,tj.sex); /*当前记录的性别拷贝到后一条*/ tj+1.age=tj.age; /*当前记录的年龄拷贝到后一条*/ strcpy(ti.no,temp.no); /*将新插入记录的学号拷贝到第i个位置*/ strcpy(,); /*将新插入记录的姓名拷贝到第i个位置*/ strcpy(ti.sex,temp.sex); /*将新插入记录的性别拷贝到第i个位置*/ ti.age = temp.age; /*将新插入记录的年龄拷贝到第i个位置*/ n+; /*记录数加1*/ return n; /*返回记录数*/*保存函数,参数为结构体数组和记录数*/void save(STUDENTS t,int n) int i; FILE *fp; /*指向文件的指针*/ if(fp=fopen(record.txt,wb)=NULL) /*打开文件,并判断打开是否正常*/ printf(can not open filen);/*没打开*/ exit(1); /*退出*/ printf(nSaving filen); /*输出提示信息*/ fprintf(fp,%d,n); /*将记录数写入文件*/ fprintf(fp,rn); /*将换行符号写入文件*/ for(i=0;in;i+) fprintf(fp,%-20s%-30s%-10s%-10d,ti.no,,ti.sex,ti.age);/*格式写入记录*/ fprintf(fp,rn); /*将换行符号写入文件*/ fclose(fp);/*关闭文件*/ printf(*save success*n); /*显示保存成功*/*读入函数,参数为结构体数组*/int load(STUDENTS t) int i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度城市照明工程项目合同
- 空调安装施工合同
- 2024年度建筑行业环保合同2篇
- 二零二四年度环保设备采购、安装及运营维护合同2篇
- 2024年人工智能语音识别技术研发合同2篇
- 2024年度维修保养合同:回迁房小区设施维护2篇
- 2024年度企业收购协议模板2篇
- 入股合作协议合同范本(2024版)
- 2024年度企业咨询服务合同-咨询服务内容与成果交付2篇
- 妊娠合并甲状腺危象的临床护理
- 2024河南省科技馆招聘23人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 医废暂存处管理制度
- 专题17 生于忧患死于安乐(含答案与解析)-备战2024年中考语文之文言文对比阅读(全国版)
- 2024-2030年中国殡葬行业市场运行分析及发展前景研究报告
- 小学科学大象版五年级上册期末练习题(2022秋)(附参考答案)
- 五年级数学北师大版(上册)分数的大小练习七|北师大版(共17张)
- 登泰山记-教学课件
- 第18课《我的白鸽》课件+2024-2025学年统编版语文七年级上册
- 电路分析基础(浙江大学)智慧树知到期末考试答案章节答案2024年浙江大学
- 信息化运维服务合同(模板)
- 《民用航空安全保卫条例》考试复习题库(含答案)
评论
0/150
提交评论