C语言课程设计课程设计力学实验设备管理系统.doc
程序设计基础课程设计课题名称 力学实验设备管理系统设计 专 业 班 级 姓 名 学 号 指导教师 陈世基 2012年 06 月 12 日目录第1章 设计目的 .1第2章 总体设计2第3章 详细设计5第4章 调试与测试15第5章 总结与体会19参考文献 . 20附:源程序清单和执行结果.21第1章 设计目的本次C语言课程设计是对本学期程序设计基础课程的实际应用,通过课程设计主要达到如下目的:1. 巩固和加深对C语言课程的基本知识的理解和掌握。 2. 掌握C语言编程和程序调试的基本技能。 3. 利用C语言进行基本的软件设计。 4. 掌握书写程序设计说明文档的能力。 5. 提高运用C语言解决实际问题的能力。第2章 总体设计2.1力学实验设备管理系统的要求通过该系统实现对力学实验设备信息进行录入、修改、统计、查询、保存等操作的管理。实验设备信息包括:设备编号,设备种类,设备名称(如烧杯、酒精灯等),设备价格,设备购入日期,是否报废,报废日期等。主要功能:1)、能够完成对设备的录入和修改2)、对设备进行分类统计3)、设备的破损耗费和遗损处理4)、设备的查询5)、将设备信息保存到文件中2.2流程图根据设计要求,画出如下流程图:开 始 菜 单 1录入2显示3修改4删除5查询6.退出a.名称b.编号结 束2.3设置的主要函数void userinterface()/*菜单函数*/void showall()/*显示*/void add()/*增加成员*/void delet()/*删除*/void find()/*查找*/void findchoice(int a) /*选择查找方式函数*/void modify()/*修改信息*/void save()/*把信息保存到磁盘*/void esc()/*退出*/void choices()/*为下一步操作做选择*/void load()/*读数据*/第2章 详细设计3.1函数以及调用关系void userinterface()/*菜单函数*/开始添加记录查找记录显示记录删除记录修改记录结束Menu_select退出保存 1 2 3 4 5 6 Break Break Break Break Break break void showall();/*显示函数*/开始调用save( )head=NULL = =N NNNNNNNNNULL NULL NULLhhhhhead hhhhhead=NULL显示信息 真 假 真退出结束void add()/*增加设备函数*/ 开始 输入编号Record=0 假 真输入数据( 名称、种类、价格、购买日期、报废日期、是否报废)继续添加结束 void delet()/*删除函数*/ 开始 输入要删除学生学号 输入numNum=!0 真 假删除成功Choices()结 束void find()/*查找函数*开始按名称查找按种类查找按编号查找 判断显示要查找内容没有找到退 出 void findchoice() 真 假 void modify()/*修改信息函数*/ 开始 输入编号Record=0 假 真输入数据( 新的名称、种类、价格、购买日期、报废日期、是否报废)结束void save();/*把信息保存到磁盘*/退 出关闭文件开始打开文件数据写入文件void load();/*读数据*/开始关闭文件读出数据打开文件退 出3.2结构的应用Ifelse结构if(strcmp(passwords,b)!=0) printf("r口令错误,按任意键继续"); else break;switch结构switch(choice) case 1:add();break; case 2:system("cls");find();break; case 3:system("cls");showall();break; case 4:system("cls");delet();break; case 5:system("cls");modify();break;case 0:system("cls");esc();while结构while(stu->record!=0) head=insert(head,stu);printf("nntt*添加成功*!n");stu=(struct addbook*)malloc(LEN);printf("nnttt当输入的设备编号为0时,停止添加!");printf("ntt请输入编号:");scanf("%d",&stu->record);getchar();/*用来接受scanf里输入的回车符号*/printf("ntt请输入名称:");gets(stu->name);printf("ntt请输入种类:");gets(stu->kind);printf("ntt请输入价格:");gets(stu->price);printf("ntt请输入购买日期(如20100101):");scanf("%ld",&stu->purtime); getchar();printf("ntt请输入报废日期(如20100101):");scanf("%ld",&stu->scrtime); getchar(); printf("ntt请输入是否报废(S或F):");gets(stu->scrap);stu->next = NULL;dowhile结构doprintf("%-8d%-8s%-8s%-8s%ld %ldtt%-8sn",s->record,s->name,s->kind,s->price,s->purtime,s->scrtime,s->scrap); s = s->next; while(s!=NULL);LP:choices();for结构for(j=0;j<strlen(b);j+) passwordsj=getch(); printf("*"); 第4章 调试与测试4.1调试执行程序时,显示如下信息:输入一组数据后,显示菜单:选择不同的选项,执行相应的功能。选择1,添加设备信息。选择2查找设备信息,可按三种方式查找。3.1.5选择3,可显示信息。选择4,删除设备信息。选择5,修改设备信息。选择0,保存并退出。4.2测试及其解决问题在测试过程中,关于购买日期和报废日期,输入正常,显示则成了乱码,经过仔细检查发现在定义变量的出现了问题,及时改正。另外由于疏忽,没有将密码函数链接到主函数中,使得密码功能没有体现,及时调整。显示内容与表头进行调整对齐,由于显示函数和查找函数都有显示功能,需要同时调整。第5章 总结与体会这一次课程设计可谓是让我焦头烂额,手足无措啊。因为我们在大一的时候并没有学过C语言这一门课程,这学期才开始接触这门课程,让我们设计一个无懈可击的程序简直比登天还难。刚开始感觉确实有点力不从心,但是经过几天的学习、摸索,我的程序也终于初具雏形了,我别提有多高兴。虽然在许多的功能方面有所欠缺,但是我觉得我是在进步的。经过几天的上机实践学习,给我的不只是疲惫更多的是收获。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握计算机开发技术是十分重要的。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?谢谢老师的那句话,她说:人力有所不能及,然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,我的程序设计终于得以问世。 课程设计到此算是基本结束,在程序设计中暴露出的我自身的问题却是非常明显! 首先,基础掌握不牢固。许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,更重要研究课本,设计效率底。 其次,经典算法掌握不牢。在编写程序的时候常常会停下来求助于书本,查看各种算法。再次,程序量过大的时候,头绪理不清。杂乱无章,无系统性,不便调试和阅览,自己也易于出错。比如说少加分号,大括号,忘了先定义后使用的原则。 回顾这一周,我感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,函数,算法通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。 在程序已经初步写成的时候,心情很激动也很紧张,在没有进行测试之前心还是放不下来。刚进行测试,检查没有错误,可执行起来却出现了很大的问题。首先是程序不具有存储功能,显示乱码,再就是密码功能没有实现。经过一遍又一遍仔细检查终于意义解决。当程序完全运行成功的时候,那种喜悦感死无法用言语来形容的。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在陈老师的辛勤指导下,终于游逆而解。同时,在陈老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!参考文献【1】谭浩强,张基温。C语言程序设计教程。第三版。北京:高等教育出版社,2006【2】谭浩强,张基温。C语言习题集与上机指导。第三版。北京:高等教育出版社,2006【3】谭浩强。C程序设计(第三版)。北京:清华大学,2005【4】谭浩强。C程序设计(第二版)。北京:清华大学,1999附:源程序清单和执行结果#include<stdio.h>#include<string.h>#include<stdlib.h>#include<process.h>#include<malloc.h>#include<conio.h>#define LEN sizeof(struct addbook)struct addbookint record;/*编号*/char name15;/*名称*/char kind5;/*种类*/char price8;/*价格*/ unsigned long purtime;/*购买日期*/unsigned long scrtime;/*报废日期*/ char scrap6; /*是否报废*/struct addbook *next;/*指向结构体数据类型的指针*/;FILE *fp;struct addbook *p,*head=NULL,*s,*t,*p1,*p2;void userinterface();/*菜单函数*/void showall();/*显示*/void add();/*增加设备*/void delet();/*删除*/void find();/*查找*/void findchoice(int a); /*选择查找方式函数*/void modify();/*修改信息*/void save();/*把信息保存到磁盘*/void esc();/*退出*/void choices();/*为下一步操作做选择*/void load();/*读数据*/struct addbook *del(struct addbook *head,int num);/*链表结点的删除*/struct addbook *insert(struct addbook*head,struct addbook *stud);/*链表中结点的插入,stud为要插入的结点的指针*/void starwindows() system("color 1f"); static char passwords80,b="123" int i=0,j; while(1) printf("请输入密码nn"); for(j=0;j<strlen(b);j+) passwordsj=getch(); printf("*"); if(strcmp(passwords,b)!=0) printf("r口令错误,按任意键继续"); else break; getch(); i+; if(i=3)exit(0); printf("ok");getch(); void main() int n;if(fp = fopen("d:C语言程序设计01.txt","r+")=NULL) printf("nnttt 文件不存在!n"); if(fp = fopen("ghps.txt","wb")=NULL) printf("文件打开错误!n"); exit(0); if(fgetc(fp)=-1) printf("tt*欢迎使用力学实验设备管理系统*n");printf("ntt这里没有信息,现在您必须添加信息.n");p=(struct addbook*)malloc(LEN);printf("ntt请输入编号:");scanf("%d",&p->record);getchar();/*用来接受scaf里输入的回车符号*/printf("ntt请输入名称:");gets(p->name);printf("ntt请输入种类:");gets(p->kind);printf("ntt请输入价格:");gets(p->price);printf("ntt请输入购买日期(如20100101):");scanf("%ld",&p->purtime); getchar();printf("ntt请输入报废日期(如20100101):");scanf("%ld",&p->scrtime); getchar(); printf("ntt请输入是否报废(S或F):");gets(p->scrap);p->next = NULL;head = p;fwrite(p,LEN,1,fp);/*将信息写入磁盘*/fclose(fp);printf("nttt添加成功!n");printf("nntt!要进行别的操作,请重新打开程序!n");exit(0);rewind(fp); /* 重建文件指针 */n=0;p1=p2 = (struct addbook*)malloc(LEN);fread(p1,LEN,1,fp);/*读出文件中的信息*/head = NULL; while(!feof(fp)n=n+1;if(n=1) head = p1;else p2->next = p1;p2=p1; p1 = (struct addbook*)malloc(LEN); fread(p1,LEN,1,fp);p2->next=NULL; fclose(fp);userinterface();save();void userinterface() int choice; printf("ntt *n"); printf("ttt 欢迎使用力学实验设备管理系统" ); printf("ntt *n"); printf("nnt *请选择你的操作*n"); printf("ttt +-+"); printf("tttttt | 1 增加设备信息 |n"); printf("ttt | 2 查找设备信息 |n"); printf("ttt | 3 显示所有信息 |n"); printf("ttt | 4 删除设备信息 |n"); printf("ttt | 5 修改设备信息 |n"); printf("ttt | 0 退出和保存 |n"); printf("ttt +-+n"); printf("nnttttttt制作:蒋美幸nnn"); Loop1:printf("请输入您的选择:(0-5):"); scanf("%d",&choice);getchar();if(choice>=0&&choice<6) switch(choice) case 1:add();break; case 2:system("cls");find();break; case 3:system("cls");showall();break; case 4:system("cls"); void starwindows()delet();break; case 5:system("cls"); void starwindows()modify();break;case 0:system("cls");esc(); else printf("输入错误,请重新选择!n");goto Loop1; void add() struct addbook *stu; stu=(struct addbook*)malloc(LEN);printf("nnttt当输入的设备编号为0时,停止添加!");printf("ntt请输入编号:");scanf("%d",&stu->record); getchar();/*用来接受scanf里输入的回车符号*/printf("ntt请输入名称:");gets(stu->name);printf("ntt请输入种类:");gets(stu->kind);printf("ntt请输入价格:");gets(stu->price);printf("ntt请输入购买日期(如20100101):"); scanf("%ld",&stu->purtime);getchar();printf("ntt请输入报废日期(如20100101):");scanf("%ld",&stu->scrtime); getchar(); printf("ntt请输入是否报废(S或F):");gets(stu->scrap);stu->next = NULL;while(stu->record!=0) head=insert(head,stu);printf("nntt*添加成功*!n");stu=(struct addbook*)malloc(LEN);printf("nnttt当输入的设备编号为0时,停止添加!");printf("ntt请输入编号:");scanf("%d",&stu->record);getchar();/*用来接受scanf里输入的回车符号*/printf("ntt请输入名称:");gets(stu->name);printf("ntt请输入种类:");gets(stu->kind);printf("ntt请输入价格:");gets(stu->price);printf("ntt请输入购买日期(如20100101):");scanf("%ld",&stu->purtime); getchar();printf("ntt请输入报废日期(如20100101):");scanf("%ld",&stu->scrtime); getchar(); printf("ntt请输入是否报废(S或F):");gets(stu->scrap);stu->next = NULL;printf("nnttt添加结束!n");choices();void find() int i;printf("ntt请选择查找方式:n");printf("tt1.按编号查找。n");printf("tt2.按名称查找。n");printf("tt3.按种类查找。n");printf("tt4.返回菜单。n");printf("tt0.退出。n");printf("nnt*请输入您的选择*n");scanf("%d",&i);getchar();if(i>=0&&i<5)switch(i)case 1:case 2:case 3:findchoice(i);break;case 4:userinterface();break;case 0:esc();break;else printf("nnttt选择错误!n");choices();void showall() s = head;if(head=NULL)printf("ntt!这里没有信息!n");goto LP;printf("nnn");printf("编号t名称t种类t价格t购买日期t报废日期t是否报废");printf("nn"); doprintf("%-8d%-8s%-8s%-8s%ld