C语言课程设计-建筑工地信息管理系统.doc_第1页
C语言课程设计-建筑工地信息管理系统.doc_第2页
C语言课程设计-建筑工地信息管理系统.doc_第3页
C语言课程设计-建筑工地信息管理系统.doc_第4页
C语言课程设计-建筑工地信息管理系统.doc_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

C语言课程设计课程名称 计算机高级语言课程设计(C)教师姓名 本科生姓名 本科生学号 本科生专业 所在院系 类别: 日期: 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录1题目要求12需求分析13总体设计14详细设计25上机操作246总结287致谢29参考文献29附:源代码301题目要求 建立如下4个文件: (1) 销售商-配件-建筑工地(销售商号码,配件号你,工地号,数量)。 (2) 建筑工地(工地号,名字,城市)。 (3) 配件(配件号,配件名,颜色,重量,产地)。 (4) 销售商(号码,名字,城市)。功能: (1) 首先建立文件,然后插入数据,并进行删除、更新操作,最后进行查询操作。 (2) 查询与供应商所在城市相同的零件(配件)-供应商(销售商)、项目(建筑工地)-供应商(销售商)记录对。 2需求分析 根据题目要求,信息采用文件存储,因而要提供文件的输入/输出操作;要插入数据,因而要提供数据的添加操作;要实现数据的删除、更新和查询,因而要提供文件记录的删除、修改和查找操作;要显示销售商与同一城市的配件和工地配对,因而要提供文件查找配对的操作;另外,还要提供键盘式选择菜单以实现功能选择。3总体设计根据上面的需求分析,可以将该系统的设计分为八大模块,即输入/输出、浏览、添加、删除、更新、查询、配对和退出,如图(1)所示。建筑工地信息管理系统输入/输出配对退出查询更新删除添加浏览图(1) 系统功能模块图4详细设计1.主函数 主函数只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。具体流程如图(2)所示。开始显示一系列功能选项输入n,判断n是否是18 N Y根据n的值调用各功能模块函数结束 图(2) 主函数流程图【程序】/*主函数*/void Re_file1();void Re_file2();void Re_file3();void Re_file4();void menu();void Append();void Display();void SFB_delete();void BS_delete();void Fit_delete();void Seller_delete();void Delete();void Update();void Query();void Match();void Wr_file1();void Wr_file2();void Wr_file3();void Wr_file4();int N=0,M=0,P=0,Q=0;main()Re_file1();/读建筑工地信息文件Re_file2();Re_file3();Re_file4();menu(); 主函数体内的界面选择部分语句单独抽取出来作为一独立菜单函数menu(),目的在于系统执行完每部分功能模块后能够方便地返回到系统界面。menu()的函数如下:/*主菜单*/void menu()int sele;sele=1;while(sele) system(cls); printf(nn); printf(tt*建筑工地信息管理系统*n); printf(tt*MENU*n); printf(tt* *n); printf(tt* 1:浏览 *n); printf(tt* 2:添加 *n); printf(tt* 3:删除 *n); printf(tt* 4:更新 *n); printf(tt* 5:查询 *n); printf(tt* 6:配对 *n); printf(tt* 7:退出 *n); printf(tt* *n); printf(tt*n); printf(tt*072122陈勋*n); printf(nn请选择功能序号:); scanf(%d,&sele); switch(sele) case 1:Display();break; case 2:Append();Display();break; case 3:Delete();Wr_file1();Wr_file2();Wr_file3();Wr_file4();Display();break; case 4:Update();Display();break; case 5:Query();break; case 6:Match();break; case 7:sele=0; printf(nn按任意键继续n); getch();Wr_file1(); Wr_file2(); Wr_file3(); Wr_file4();/写文件2.各功能模块设计(1)数据读入和输出模块【数据结构】原始数据有四类:项目信息(销售商-配件-建筑工地)、建筑工地信息、配件信息和销售商信息。四类信息分别保存在四个文件中,项目信息文件命名为SellerFitBuild.txt,建筑工地信息文件命名为BuildingSite.txt,配件信息文件命名为Fitting.txt,销售商信息文件命名为Seller.txt。【分析】 从各个数据信息来看,销售商号码,配件号,工地号,以及工地名,城市,配件名,颜色,产地,销售商名称都采用的是字符型数据,销售数量用的是整型数据,配件重量是浮点型数据。四类信息采用结构体数组的形式存放:/项目(销售商-配件-建筑工地)信息的结构体struct SellerFitBuildchar seller_code10; /销售商号码char fit_code10; /配件号char build_code10; /工地号int num; /销售数量SFB100; /seller_code号销售商销售num个fit_code号配件给build_code工地/建筑工地信息的结构体struct BuildingSitechar build_code10; /工地号char build_name10; /工地名char city10; /城市BS100;/配件信息的结构体struct Fittingchar fit_code10; /配件号char fit_name10; /配件名char color10; /配件颜色float weight; /配件重量char city10; /配件产地Fit100;/销售商信息的结构体struct Sellerchar seller_code10; /销售商号码char seller_name10; /销售商名称char city10; /销售商城市Seller100;【程序】/*数据读入和输出模块*/void Re_file1()FILE*fp;fp=fopen(SellerFitBuild.txt,r);if(fp=NULL)printf(cannot open the file);exit(0);/退出while(fscanf(fp,%s%s%s%d,SFBN.seller_code,SFBN.fit_code,SFBN.build_code,&SFBN.num)!=EOF)N+;fclose(fp);void Re_file2()FILE*fp;fp=fopen(BuildingSite.txt,r);if(fp=NULL)printf(cannot open the file);exit(0);while(fscanf(fp,%s%s%s,BSM.build_code,BSM.build_name,BSM.city)!=EOF)M+;fclose(fp);void Re_file3()FILE*fp;fp=fopen(Fitting.txt,r); if(fp=NULL)printf(cannot open the file);exit(0);while(fscanf(fp,%s%s%s%f%s,FitP.fit_code,FitP.fit_name,FitP.color,&FitP.weight,FitP.city)!=EOF)P+;fclose(fp);void Re_file4()FILE*fp;fp=fopen(Seller.txt,r);if(fp=NULL)printf(cannot open the file);exit(0);while(fscanf(fp,%s%s%s,SellerQ.seller_code,SellerQ.seller_name,SellerQ.city)!=EOF)Q+;fclose(fp);void Wr_file1()int i;FILE*fp;fp=fopen(SellerFitBuild.txt,w);for(i=0;iN;i+)fprintf(fp,%s %s %s %dn,SFBi.seller_code,SFBi.fit_code,SFBi.build_code,SFBi.num);fclose(fp);void Wr_file2() int i;FILE*fp;fp=fopen(BuildingSite.txt,w);for(i=0;iM;i+)fprintf(fp,%s %s %sn,BSi.build_code,BSi.build_name,BSi.city);fclose(fp);void Wr_file3() int i;FILE*fp;fp=fopen(Fitting.txt,w);for(i=0;iP;i+)fprintf(fp,%s %s %s %f %sn,Fiti.fit_code,Fiti.fit_name, Fiti.color,Fiti.weight,Fiti.city);fclose(fp);void Wr_file4()int i;FILE*fp;fp=fopen(Seller.txt,w);for(i=0;iQ;i+)fprintf(fp,%s %s %sn,Selleri.seller_code,Selleri.seller_name,Selleri.city);fclose(fp);【分析】 有四个文件要读入和输出:项目信息,工地信息,配件信息和销售商信息。所以针对这两个功能分别建立了四个函数对文件进行读入和输出。具体流程图如下:开始 定义文件指针fp文件是否打开成功 N Y输入数据输出错误信息返回主菜单结束图(3)读入文件信息模块流程图【注意】文件的输出操作隐藏在menu()函数中,在对文件进行完相关的操作后,对操作的结果进行保存。(2)数据添加模块【需求分析】该模块的功能是在文件中添加新的信息,用户从键盘输入并逐条写到原来的输入文件中。具体的操作流程图如图(4):开始输入要添加的选项输入要添加的数目输入要添加的信息浏览添加后的文件回到主菜单结束图(4)数据添加模块流程图【程序】/*数据添加模块*/void Append() int n,m,i;system(cls);/清屏printf(tt*添加菜单*nn); printf(tt1.销售商-配件-建筑工地n); printf(tt2.建筑工地 n); printf(tt3.配件n); printf(tt4.销售商n); printf(tt5.Exitnn); /*添加菜单*/printf(tt*n); printf(请选择序号:n); scanf(%d,&n);if(n=5) menu();printf(请输入添加的数目:n);scanf(%d,&m);N=m+N;M=m+M;P=m+P;Q=m+Q;printf(现在,请输入相关信息:n);if(n=1)for(i=1;i=m;i+) printf(销售商号码:);scanf(%s,SFBN-m-1+i.seller_code);printf(配件号:);scanf(%s,SFBN-m-1+i.fit_code);printf(工地号:);scanf(%s,SFBN-m-1+i.build_code);printf(销售数量:);scanf(%d,&SFBN-m-1+i.num);else if(n=2)for(i=1;i=m;i+) printf(工地号:);scanf(%s,BSM-m-1+i.build_code);printf(工地名:);scanf(%s,BSM-m-1+i.build_name);printf(城市:);scanf(%s,BSM-m-1+i.city);else if(n=3)for(i=1;i=m;i+) printf(配件号:);scanf(%s,FitP-m-1+i.fit_code);printf(配件名:);scanf(%s,FitP-m-1+i.fit_name);printf(配件颜色:);scanf(%s,FitP-m-1+i.color);printf(配件重量:);scanf(%f,&FitP-m-1+i.weight);printf(配件产地:);scanf(%s,FitP-m-1+i.city);else if(n=4)for(i=1;i=m;i+) printf(销售商号码:);scanf(%s,SellerQ-m-1+i.seller_code);printf(销售商名称:);scanf(%s,SellerQ-m-1+i.seller_name);printf(城市:);scanf(%s,SellerQ-m-1+i.city);(3)数据删除模块【需求分析】开始 用户要删除四个文件中的信息,根据销售商号码,工地号或配件号查找相应的记录信息并删除。删除一般的做法是将数据从文件中删除,删除位置后面的记录往前移动。具体的操作流程图如下图(5);选择进行删除操作的文件输入要删除的项目提示错误信息是否找到删除数据成功 Y N浏览删除后的文件信息 结束图(5)数据删除模块的流程图【程序】/*数据删除模块*/void SFB_delete() int i,j=-1; char m20;system(cls);printf(请输入要删除的销售商号码:); scanf(%s,m);for(i=0;iN;i+)if(strcmp(m,SFBi.seller_code)=0)j=i;if(j!=-1)N=N-1;for(i=j;i=N&j!=-1;i+)SFBi=SFBi+1;else if(j=-1)printf(Cannot find the data!n); void BS_delete() int i,j=-1; char m20;system(cls);printf(请输入要删除的工地号:); scanf(%s,m);for(i=0;iM;i+)if(strcmp(m,BSi.build_code)=0)j=i;if(j!=-1)M=M-1;for(i=j;i=N&j!=-1;i+)BSi=BSi+1;else if(j=-1)printf(Cannot find the data!n);void Fit_delete() int i,j=-1; char m20;system(cls);printf(请输入要删除的配件号:); scanf(%s,m);for(i=0;iP;i+)if(strcmp(m,Fiti.fit_code)=0)j=i;if(j!=-1)P=P-1;for(i=j;i=N&j!=-1;i+)Fiti=Fiti+1;else if(j=-1)printf(Cannot find the data!n);void Seller_delete () int i,j=-1; char m20;system(cls);printf(请输入要删除的销售商号码:); scanf(%s,m);for(i=0;iQ;i+)if(strcmp(m,Selleri.seller_code)=0)j=i;if(j!=-1)Q=Q-1;for(i=j;i=N&j!=-1;i+)Selleri=Selleri+1;else if(j=-1)printf(Cannot find the data!n);void Delete() int t,m;system(cls);do printf(tt*删除菜单*nn); printf(tt1.销售商-配件-建筑工地n); printf(tt2.建筑工地 n); printf(tt3.配件n); printf(tt4.销售商n); printf(tt5.Exitnn); /*删除菜单*/printf(tt*n); printf(请选择序号:n); scanf(%d,&m); if(m5) t=1; getchar(); else t=0; while(t=1); switch(m) case 1:SFB_delete();break; case 2:BS_delete();break; case 3:Fit_delete();break; case 4:Seller_delete();break; case 5:menu(); (4)数据更新模块【需求分析】 该模块的功能是根据销售商号码,配件号,工地号在相应的文件里找到要修改的记录,并提示用户修改该记录的哪部分信息(销售数量,工地名,城市等等),然后根据用户的选择修改相应信息。具体的流程图如下图(6):开始输入要进行操作的文件输入要修改的项目是否找到 N Y输入新信息浏览修改后的文件主菜单结束图(6)数据更新模块流程图【程序】/*数据更新模块*/void Update() int i,j=-1,d=0,t,n,k=1,f=1;char m20; loop: while(f) system(cls); printf(请选择要更新的项目:n1.销售商-配件-建筑工地n2.建筑工地n3.配件n4.销售商n); scanf(%d,&n); if(n=1) printf(1.销售商号码n2.配件号n3.工地号n); printf(请输入修改选项:); scanf(%d,&f); if(f=1) printf(请输入销售商号码:); scanf(%s,&m); for(i=0;iN;i+) if(strcmp(m,SFBi.seller_code)=0 )j=i; else if(f=2) printf(请输入配件号:); scanf(%s,&m); for(i=0;iN;i+) if(strcmp(m,SFBi.fit_code)=0) j=i; else if(f=3) printf(请输入工地号:); scanf(%s,&m); for(i=0;iN;i+) if(strcmp(m,SFBi.build_code)=0) j=i; if(j=-1) printf(没有找到!n); goto loop;/goto语句构成循环 else printf(n销售商号码 配件号 工地号 销售数量n); printf(%-10s %-10s %-10s %-10d,SFBj.seller_code,SFBj.fit_code,SFBj.build_code,SFBj.num); while(k=1) printf(n1.销售商号码n2.配件号n3.工地号n4.销售数量n); printf(请输入要修改的选项: ); scanf(%d,&t); switch(t) case 1:printf(销售商号码改为:);scanf(%s,SFBj.seller_code);break; case 2:printf(配件号改为:);scanf(%s,SFBj.fit_code);break; case 3:printf(工地号改为:);scanf(%s,SFBj.build_code);break; case 4:printf(销售数量改为:);scanf(%d,&SFBj.num);break; printf(请问你是(1)否(2)继续); scanf(%d,&k); f=0; if(n=2) printf(请输入工地号:); scanf(%s,&m); for(i=0;iM;i+) if(strcmp(m,BSi.build_code)=0) j=i; if(j=-1) printf(没有找到!n); goto loop;/goto语句构成循环 else printf(工地号 工地名 城市n); printf(%-9s %-10s %-10s,BSj.build_code,BSj.build_name, BSj.city); printf(1.工地号n2.工地名n3.城市n); printf(请输入要修改的选项: ); scanf(%d,&t); switch(t) case 1:printf(工地号改为:);scanf(%s,BSj.build_code);break; case 2:printf(工地名改为:);scanf(%s,BSj.build_name);break; case 3:printf(城市改为:);scanf(%s,BSj.city);break; f=0; if(n=3) printf(请输入配件号:); scanf(%s,&m); for(i=0;iP;i+) if(strcmp(m,Fiti.fit_code)=0) j=i; if(j=-1) printf(没有找到!n); goto loop;/goto语句构成循环 else printf( 配件号 配件名 配件颜色 配件重量 配件产地n); printf(%-9s ,%-10s, %-10s ,%-10f, %-10s,Fitj.fit_code,Fitj.fit_name, Fitj.color,Fitj.weight,Fitj.city); printf(1.配件号n2.配件名n3.颜色n4.重量n5.产地n); printf(请输入要修改的选项: ); scanf(%d,&t); switch(t) case 1:printf(配件号改为:);scanf(%s,Fitj.fit_code);break; case 2:printf(配件名改为:);scanf(%s,Fitj.fit_name);break; case 3:printf(颜色改为:);scanf(%s,Fitj.color);break; case 4:printf(重量改为:);scanf(%f,&Fitj.weight);break; case 5:printf(产地改为:);scanf(%s,Fitj.city);break; f=0; if(n=4) printf(请输入销售商号码:); scanf(%s,&m); for(i=0;iQ;i+) if(strcmp(m,Selleri.seller_code)=0) j=i; if(j=-1) printf(没有找到!n); goto loop;/goto语句构成循环 else printf(销售商号码 销售商名称 销售商城市n); printf(%-10s ,%-10s, %-10s,Sellerj.seller_code, Sellerj.seller_name,Sellerj.city); printf(1.销售商号码n2.销售商名字n3.城市n); printf(请输入要修改的选项: ); scanf(%d,&t); switch(t) case 1:printf(销售商号码改为:);scanf(%s,Sellerj.seller_code);break; case 2:printf(销售商名字改为:);scanf(%s,Sellerj.seller_name);break; case 3:printf(城市改为:);scanf(%s,Sellerj.city);break; f=0; (5)数据查询模块【需求分析】 该模块的功能是根据输入的销售商号码,工地号和配件号在相应的文件里查找对应的记录,并显示出来。具体流程图如下图(7):开始选择要进行操作的文件输入要查询的项目是否找到 N没有找到! Y显示要查询的信息主菜单结束图(7)数据查询模块流程图【程序】/*数据查询模块*/void Query() int i,j20=-1,k,n,t=0;char m20;system(cls);/清屏printf(tt*查询菜单*nn); printf(tt1.销售商-配件-建筑工地n); printf(tt2.建筑工地 n); printf(tt3.配件n); printf(tt4.销售商n); printf(tt5.Exitnn); /*查询菜单*/printf(tt*n); printf(请选择查询选项:n); scanf(%d,&n);if(n=1) printf(1.销售商号码n2.配件号n3.工地号n);printf(请输入查询选项:);scanf(%d,&k);if(k=1)printf(请输入销售商号码:);scanf(%s,&m);for(i=0;iN;i+)if(strcmp(m,SFBi.seller_code)=0)jt=i;t=t+1;else if(k=2)printf(请输入配件号:); scanf(%s,&m); for(i=0;iN;i+) if(strcmp(m,SFBi.fit_code)=0) jt=i;t=t+1; else if(k=3)printf(请输入工地号:);scanf(%s,&m); for(i=0;iN;i+) if(strcmp(m,SFBi.build_code)=0) jt=i;t=t+1; if(j0=-1&t=0)printf(没有找到!n);if(j0!=-1&t!=0)printf(销售商号码 配件号 工地号 销售数量:n);for(i=0;it;i+)printf(%-9s %-10s %-10s %-10d,SFBji.seller_code,SFBji.fit_code,SFBji.build_code,SFBji.num);if(n=2)printf(请输入工地号:);scanf(%s,&m);for(i=0;iM;i+)if(strcmp(m,BSi.build_code)=0)jt=i;t=t+1; if(j0=-1&t=0)printf(没有找到!n);if(j0!=-1&t!=0) printf(工地号 工地名 城市:n);printf(%-9s %-10s %-10s,BSji.build_code,BSji.build_name,BSji.city);if(n=3)printf(请输入配件号:);scanf(%s,&m);for(i=0;iP;i+)if(strcmp(m,Fiti.fit_code)=0)jt=i;t=t+1;if(j0=-1&t=0)if(j0=-1&t=0)printf(没有找到!n);if(j0!=-1&t!=0) printf( 配件号 配件名 颜色 重量 产地:n); printf(%-9s ,%-10s, %-10s ,%-10f, %-10s,Fitji.fit_code,Fitji.fit_name,Fitji.color,Fitji.weight,Fitji.city);if(n=4)printf(请输入销售商号码:);scanf(%s,&m);for(i=0;iQ;i+)if(strcmp(m,Selleri.seller_code)=0) jt=i;t=t+1;if(j0=-1&t=0)printf(没有找到!n);if(j0!=-1&t!=0) printf( 销售商号码 销售商名字 城市: n);printf(%-

温馨提示

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

评论

0/150

提交评论