《583742350《高级语言程序设计》课程设计建筑工地信息管理系统.doc》由会员分享,可在线阅读,更多相关《583742350《高级语言程序设计》课程设计建筑工地信息管理系统.doc(37页珍藏版)》请在三一办公上搜索。
1、 高级语言程序设计三峡大学理学院10级光信息科学与技术专业高级语言程序设计课程设计说明书 设计题目:建筑工地信息管理系统 班 级:光信 学 号: 姓 名: 指导老师: 完成日期:2011/11/20前言课程设计目的高级语言程序设计课程设计是电子信息、光信息专业以及物理学专业集中实践性环节之一,是学习完高级语言程序设计课程后进行的一次全面的综合练习,其目的在于加深对程序设计基本知识的理解,掌握使用C语言进行模块化软件设计的基本方法,提高通过编写程序解决实际问题的能力,为今后从事设计工作和后续各种编程课程的学习打好基础。1、 题目要求设计:“建筑工地信息管理系统”(1)主函数建立四个文件,输出提示
2、用户操作的信息,选择操作文件:R销售商-配件-建筑工地,B建筑工地,F配件,S销售商,空格键查询。(2)数据输入模块 写数据到相应文件中。 (3)数据插入模块 采用追加的方式写数据到文件。 (4)数据删除模块 通过菜单选择相应的文件后,打开该文件,从文件中读一条记录,判断是否要删除,如 果是,则舍弃;否则重新写入文件,读下一条记录。 (5)数据更新模块 与数据删除模块类似,只是判断所读的纪录是否要更新,如果是,则把更新后的纪录写 入文件,否则直接写入文件。 (6)按空格键进入查询操作 通过菜单选择查询零件-供应商或者项目-供应商。例如选择查询零件-供应商。其基本流程如下: 打开销售商-配件-建
3、筑工地文件; While(文件未结束) 读一条记录,得到销售商号码和配件号; 在销售商文件中查找该销售商号码,得到该销售商所在城市; 在配件文件中查找配件号,得到该配件的产地; 如果销售商所在城市与配件的产地相同,则输出销售商号码和配件号码; 查询项目-供应商记录对的操作类似,只需把配件号改为工地号即可。 2、分析 1、需求分析:信息采用文件存储,因而要提供文件的输入输出操作;要插入数据,因而要提供数据的 添加操作; 要实现数据的删除、 更新和查询, 因而要提供文件记录的删除、 修改和查找操作; 另外要提供键盘式选择菜单以实现功能选择。 2、总体设计:整个系统可以被设计为数据输入模块、数据添加
4、模块、数据删除模块、数据查询并修改模块、配对模块。 建筑工地信息管理系统数据输入模块数 据 添 加 模 块删除模块查询修改模块 查 找 配对 模块 功能 选 择 菜 单 图1 系统功能模块图 4、详细设计一、主函数【分析】 主函数一般设计得比较简便,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。void menu()f1()f11() dodo switch(c)switch(c) case 1:f1();break; case 1:f11();break; case 2:f2();break; case 2:f12();break; case 3:f2();break;
5、 case 3:f13();break; case 4:f2();break; case 4:f14();break;case 5:exit(0); case 5:back=0;break; default:break; default:break; while(1); while(1); 图(2) 【程序】/*主菜单*/ void menu() int w; do system(cls); printf(tt*MENU*nn); printf(tttt1.输入n);/*输入*/ printf(tttt2.删除n);/*删除*/ printf(tttt3.查找与修改n);/*查找与修改*/ p
6、rintf(tttt4.配对n);/*查找配对*/ printf(tttt5.添加n); printf(tttt6.退出); printf(nntt*n); printf(Choose your number (1-6): bb); scanf(%d,&w); switch(w) case 1:enter();break; case 2:Delete();break; case 3:search();break; case 4:search2();break; case 5:add();break; case 6:exit(0); default:break; while(1); void m
7、ain()system(cls);system(color 0a9);start();system(PAUSE); menu();二、各功能模块设计(1)数据输入模块【分析】 数据信息存放在文件中,用结构体存放,方便数据输入与数据的保存。另外,输入模块中建立副菜单,用以输入四个文件的信息选项。【程序】(以输入销售商结构体信息为例)/*数据输入模块*/ void SEL_enter () system(cls);int j; char c2; FILE *fp; if(fp=fopen(data4.txt,w)=NULL) printf(Can not open the file!n); exi
8、t(0); for(j=0;ji;j+) fwrite(&selj,sizeof(struct seller),1,fp); while(1) printf(n输入销售商号:); scanf(%s,seli.num); printf(n输入销售商名:); scanf(%s,seli.name); printf(n输入销售商所在城市:); scanf(%s,seli.city); if(fwrite(&seli+,sizeof(struct seller),1,fp)!=1) printf(nFile write errorn); else printf(Successful! -n); pri
9、ntf(是否继续?y/n: bb); scanf(%s,c); if(strcmp(c,n)=0|strcmp(c,N)=0)break; fclose(fp);system(PAUSE); void enter() int m,back; do system(cls); printf(tt*MENU*nn); printf(t以下符号:S-项目、B-建筑工地、P-配件、SEL-销售商n); printf(tttt1.输入数据到Sn); printf(tttt2.输入数据到Bn); printf(tttt3.输入数据到Pn); /*输入菜单*/ printf(tttt4.输入数据到SELn);
10、 printf(tttt5.返回); printf(nntt *n); printf(请选择(1-5): bb); scanf(%d,&m); switch(m) case 1:sal_enter();break; case 2:build_enter();break; case 3:pj_enter();break; case 4:SEL_enter();break; case 5:back=0;break; default:break; if(back=0)break; while(1); (2)删除模块【分析】 建立副菜单,选择要删除的是哪个文件中的信息,输入相应的信息,找到数据将其删除
11、。一般的做法是将数据从文件中删除,删除位置后面的记录往前移。模块如: 开始输入要删除的数据是否找到?删除数据显示成功显示没有找到Y是否继续?是否图(3) 删除模块流程图【程序】(以删除销售商结构体信息为例)/*删除模块*/ void SEL_delete() system(cls);int j,v,flag=0; char a5,c2; FILE *fp; if(fp=fopen(data4.txt,r)=NULL) printf(n打开文件失败!n); exit(0);do printf(请输入号码:); scanf(%s,a); for(j=0;j100;j+) if(fread(&sel
12、j,sizeof(struct seller),1,fp)!=1) break; fclose(fp); fp=fopen(data4.txt,w); v=j; for(j=0;jv;j+) if(strcmp(selj.num,a)=0) printf(n销售商号码,销售商名字,城市: n); printf(%s %s %s,selj.num,selj.name,selj.city); for(i=j;iv;i+) seli=seli+1; printf(Successful! -n); flag=1; if(flag=0)printf(Cannot find the data!n); pr
13、intf(是否继续y/n: bb); scanf(%s,c); if(strcmp(c,n)=0|strcmp(c,N)=0)break;while(1);for(j=0;ji;j+)fwrite(&selj,sizeof(struct seller),1,fp); fclose(fp);system(PAUSE);void Delete() int m,back; do system(cls); printf(tt*MENU*nn); printf(t以下符号:S-项目、B-建筑工地、P-配件、SEL-销售商n); printf(tttt1.删除数据到Sn); printf(tttt2.删除
14、数据到Bn); printf(tttt3.删除数据到Pn); /*删除菜单*/ printf(tttt4.删除数据到SELn); printf(tttt5.返回); printf(nntt *n); printf(请选择(1-5): bb); scanf(%d,&m); switch(m) case 1:sal_delete();break; case 2:build_delete();break; case 3:pj_delete();break; case 4:SEL_delete();break; case 5:back=0;break; default:break; if(back=0
15、)break; while(1); (3)查找与修改模块【分析】 选择查找方式,输入相应的数据然后找出对应的数据。模块流程图:开始输入查找的方式:1)项目号;2)工地号;3)配件号;4)销售商号是否找到?显示找到的记录提示没找到Y返回主菜单Y是否继续查找?返回副菜单是否修改? 图(4) 查找修改模块流程图【程序】(以查找修改销售商结构体信息为例)/*查找与修改模块*/ void SEL_search()system(cls);char a5,c2;int j,k=0,flag=0;struct seller p1100,p2100;FILE *fp;printf(n请输入要查找的销售商号:);
16、scanf(%s,a);if(fp=fopen(data4.txt,r)=NULL)printf(n打开文件失败!n); exit(0);for(j=0;!feof(fp);j+)fread(&p1j,sizeof(struct seller),1,fp);if(strcmp(p1j.num,a)=0) printf(n销售商号:%sn,p1j.num); printf(销售商名:%sn,p1j.name); printf(所在城市名:%sn,p1j.city); printf(-n); flag=1;printf(n是否修改y/n: bb); scanf(%s,c); if(strcmp(c
17、,y)=0|strcmp(c,Y)=0) printf(n销售商号:);scanf(%s,p2k.num);strcpy(p1j.num,p2k.num);printf(n销售商名:);scanf(%s,p2k.name);strcpy(p1j.name,p2k.name);printf(n所在城市名:);scanf(%s,p2k.city);strcpy(p1j.city,p2k.city);k+;printf(successful! -n); /else continue;fclose(fp); fp=fopen(data4.txt,w);for(k=0;kj;k+) fwrite(&p1
18、k,sizeof(struct seller),1,fp);if(flag=0)printf(没有要找的数据!n);fclose(fp);system(PAUSE);void search() int back,w; do system(cls); printf(tt*MENU*nn); printf(tttt1.by项目号n); printf(tttt2.by工地号n); printf(tttt3.by配件号n); /*查找与修改菜单*/ printf(tttt4.by销售商号n); printf(tttt5. 返回); printf(nntt *n); printf(请选择(1-5): b
19、b); scanf(%d,&w); switch(w) case 1:sal_search();break; case 2:build_search();break; case 3:pj_search();break; case 4:SEL_search();break; case 5:back=0;break; default:break; if(back=0)break; while(1); (4)查找配对模块【分析】 功能跟查找大致相同,输入要配对的相应信息,找出要的信息。开始方式:1)配件-供应商;2)项目-供应商是否找到?显示找到的记录提示没找到N 图(5) 查找配对模块流程图【程序
20、】(以查找配件供应商信息为例)/*查找配对模块*/void find1()system(cls);int m=0,n,k;int flag=0;FILE *fp,*fp1,*fp2;if(fp=fopen(data1.txt,r)=NULL) printf(Can not open the file!n); exit(0); if(fp1=fopen(data3.txt,r)=NULL) printf(Can not open the file!n); exit(0); if(fp2=fopen(data4.txt,r)=NULL) printf(Can not open the file!n
21、); exit(0); dofread(&salm,sizeof(struct sale),1,fp);for(n=0;!feof(fp1);n+)fread(&pjn,sizeof(struct peijian),1,fp1);if(strcmp(pjn.num,salm.num2)=0)break;for(k=0;!feof(fp2);k+)fread(&selk,sizeof(struct seller),1,fp2);if(strcmp(selk.num,salm.num1)=0)break;if(strcmp(selk.city,pjn.area)=0)printf(销售商号码:%s
22、n,selk.num);printf(配件号:%sn,pjn.num);flag=1;m+;while(!feof(fp);if(flag=0)printf(没有配对项!n);fclose(fp1);fclose(fp2);fclose(fp);system(PAUSE); 5、上机操作 (1) 主菜单函数 图(6) 主菜单(2)数据输入模块 图(7) 输入副菜单(3) 删除模块 图(8) 删除模块(4) 查找模块图(9) 查找修改模块(5)添加模块图(10) 添加模块(6)查找配对模块 图13 查找配对模块后记这次课程设计,让我对C语言编程有了更进一步的认识,巩固了C语言的基本功,同时体会到
23、:做好一件事是不容易的,要找准方向并付出最大努力,才有好的收获!我原本以为计算机二级过了,编程就没多大问题了,通过这次课设,我才明白考试只是一种形式,真正能检验实力还是实践。能看懂程序并不代表会写程序,看程序和写程序之间需要很长的路要走。我觉得这次课设主要是对基本知识的综合应用,并引入模块化程序设计的思想。比如我这个建筑工地信息管理系统,主要是用do、for循环和switch结构以文件为中间平台,使各模块之间能够数据共享,而不需要传值或传地址调用,降低了模块间的耦合性。应该说这次课设是为以后学习软件技术奠基。最后需要说明的是,这个程序还没有达到理想的效果,希望各位能够提供些帮助和建议!参考文献
24、1谭浩强.C程序设计(第二版).北京:清华大学出版社,19992王新 孙雷.C语言课程设计.北京:清华大学出版社,20093谭浩强.C程序设计(第三版).北京:清华大学出版社,2005 附录:源程序清单/*文件*data1.txtdata2.txtdata3.txtdata4.txt*/#include #include #include #include /#include#define SPACE 0x3920#define ESC 0x011bint i=0; struct sale /*定义销售商-配件-建筑工地*/ char num15; /*销售商号码*/ char num25;
25、/*配件号*/ char num35; /*工地号*/ int num; /*数量*/ sal100; struct building /*定义建筑工地结构体*/ char num5; /*工地号*/ char name20; /*工地名*/ char city20; /*城市名*/ build100; struct peijian /*定义配件结构体*/ char num5; /*配件号*/ char name20; /*配件名*/ char color20; /*颜色*/ int weight; /*重量*/ char area20; /*产地*/ pj100; struct seller
26、 /*定义销售商结构体*/ char num5; /*销售商号码*/ char name20; /*销售商名字*/ char city20; /*城市*/ sel100; /*数据输入模块*/ void sal_enter() system(cls); int j; char c2; FILE *fp; if(fp=fopen(data1.txt,w)=NULL) printf(Can not open the file!n); exit(0); for(j=0;ji;j+) fwrite(&salj,sizeof(struct sale),1,fp); while(1) printf(n输入
27、销售商号码:); scanf(%s,sali.num1); printf(n输入配件号码:); scanf(%s,sali.num2); printf(n输入工地号码:); scanf(%s,sali.num3); printf(n输入数量:); scanf(%d,&sali.num); if(fwrite(&sali+,sizeof(struct sale),1,fp)!=1) printf(nFile write errorn); else printf(Successful! -n); printf(是否继续?y/n: bb); scanf(%s,c); if(strcmp(c,n)=0
28、|strcmp(c,N)=0)break; fclose(fp);system(PAUSE); void build_enter() system(cls);int j; char c2; FILE *fp; if(fp=fopen(data2.txt,w)=NULL) printf(Can not open the file!n); exit(0); for(j=0;ji;j+) fwrite(&buildj,sizeof(struct building),1,fp); while(1) printf(n输入工地号:); scanf(%s,buildi.num); printf(n输入工地名
29、:); scanf(%s,buildi.name); printf(n输入工地城市:); scanf(%s,buildi.city); if(fwrite(&buildi+,sizeof(struct building),1,fp)!=1) printf(nFile write errorn); else printf(Successful! -n); printf(是否继续?y/n: bb); scanf(%s,c); if(strcmp(c,n)=0|strcmp(c,N)=0)break; fclose(fp);system(PAUSE); void pj_enter() system(
30、cls);int j; char c2; FILE *fp; if(fp=fopen(data3.txt,w)=NULL) printf(Can not open the file!n); exit(0); for(j=0;ji;j+) fwrite(&pjj,sizeof(struct peijian),1,fp); while(1) printf(n输入配件号:); scanf(%s,pji.num); printf(n输入配件名:); scanf(%s,pji.name); printf(n输入配件颜色:); scanf(%s,pji.color); printf(n输入配件重量:);
31、scanf(%d,&pji.weight); printf(n输入配件产地:); scanf(%s,pji.area); if(fwrite(&pji+,sizeof(struct peijian),1,fp)!=1) printf(nFile write errorn); else printf(Successful! -n); printf(是否继续?y/n: bb); scanf(%s,c); if(strcmp(c,n)=0|strcmp(c,N)=0)break; fclose(fp);system(PAUSE); void SEL_enter () system(cls);int
32、j; char c2; FILE *fp; if(fp=fopen(data4.txt,w)=NULL) printf(Can not open the file!n); exit(0); for(j=0;ji;j+) fwrite(&selj,sizeof(struct seller),1,fp); while(1) printf(n输入销售商号:); scanf(%s,seli.num); printf(n输入销售商名:); scanf(%s,seli.name); printf(n输入销售商所在城市:); scanf(%s,seli.city); if(fwrite(&seli+,siz
33、eof(struct seller),1,fp)!=1) printf(nFile write errorn); else printf(Successful! -n); printf(是否继续?y/n: bb); scanf(%s,c); if(strcmp(c,n)=0|strcmp(c,N)=0)break; fclose(fp);system(PAUSE); void enter() int m,back; do system(cls); printf(tt*MENU*nn); printf(t以下符号:S-项目、B-建筑工地、P-配件、SEL-销售商n); printf(tttt1.
34、输入数据到Sn); printf(tttt2.输入数据到Bn); printf(tttt3.输入数据到Pn); /*输入菜单*/ printf(tttt4.输入数据到SELn); printf(tttt5.返回); printf(nntt *n); printf(请选择(1-5): bb); scanf(%d,&m); switch(m) case 1:sal_enter();break; case 2:build_enter();break; case 3:pj_enter();break; case 4:SEL_enter();break; case 5:back=0;break; default:break; if(back=0)break; while(1)