1、C语言课程设计论文建筑工地信息管理系统1.课程论文题目建筑工地信息管理系统【要求】建立如下4个文件(括号内为文件中每条记录的字段内容):(1)销售商-配件-建筑工地 (销售商号码,配件号,工地号,数量)(2)建筑工地 (工地号,名字,城市)(3)配件 (配件号,配件名,颜色,重量,产地)(4)销售商 (号码,名字,状态,城市)功能:(1)首先建立文件,然后插入数据,并进行删除、更新操作,最后进行查询操作。(2)查询与供应商所在城市相同的零件供应商,项目供应商记录对。2.程序设计思路根据题目要求,由于建筑工地信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中要浏览、修改建筑工地的信息
2、,应提供输入、删除、查找、配对操作;另外还应提供键盘式选择菜单实现功能选择。3.功能模块图 根据上面的需求分析,可以将这个系统的设计分为数据输入、数据删除、数据查找、数据配对这几个模块。 数 据 查 找 数 据 删 除 数 据 配 对 数 据 输 入 图1 系统功能模块图4.程序代码4-1 主函数主函数一般设计得比较简洁,只提供输入、处理和输出部分的函数调用。其中各功能模块用菜单方式选择。其流程图如图2所示: 图2 主函数流程图【程序】void menu() int n; puts(tt*建筑工地信息管理*nn); puts(tt*MENU*nn); puts(tttt1.输入); puts(
3、tttt2.删除); puts(tttt3.查找); puts(tttt4.配对); puts(tttt5.Exit); puts(nntt*n); loop: printf(Choose your number (1-5): bb); scanf(%d,&n); if(n5) printf(Error!);goto loop; else switch(n) case 1:enter();break; case 2:delete();break; case 3:search();break; case 4:search2();break; case 5:exit(0); main() menu
4、(); 4-2 输入模块【需求分析】单独看各数据信息,名字、城市、配件名、颜色、重量、产地、状态是字符型,可以采用字符型数组;销售商号码、配件号、工地号、号码为整数,采用整型。数据信息分别放在4个文件中,每条记录对应相应的字段内容。数据信息采用结构体的形式。输入模块中建立副菜单,用以选择要输入的文件。其流程图如下图3所示: 图3 输入模块流程图【程序】/*数据输入模块*/ void sal_enter() int j; char c2; FILE *fp; if(fp=fopen(data1.dat,wb)=NULL) printf(Can not open the file!n); exit
5、(0); for(j=0;ji;j+) fread(&salj,sizeof(struct sale),1,fp); while(1) printf(输入销售商号码:n); scanf(%d,&sali.num1); printf(输入配件号码:n); scanf(%d,&sali.num2); printf(输入工地号码:n); scanf(%d,&sali.num3); printf(输入数量r:n); scanf(%d,&sali.num4); if(fwrite(&sali+,sizeof(struct sale),1,fp)!=1) printf(File write errorn)
6、; else printf(Successful!n); Loop1:printf(是否继续?( 是y/否n) n); scanf(%s,c); if(strcmp(c,n)=0) break; else if(strcmp(c,y)!=0) printf(error!n);goto loop1; fclose(fp); menu(); void build_enter() int j; char c2; FILE *fp; if(fp=fopen(data2.dat,wb)=NULL) printf(Can not open the file!n); exit(0); for(j=0;ji;
7、j+) fwrite(&buildj,sizeof(struct building),1,fp); while(1) printf(输入项目号码:n); scanf(%d,&buildi.num1); printf(输入工地号:n); scanf(%d,&buildi.num); printf(输入工地名:n); scanf(%s,buildi.name); printf(输入工地城市:n); scanf(%s,buildi.city); if(fwrite(&buildi+,sizeof(struct building),1,fp)!=1) printf(File write errorn)
8、; else printf(Successful!n); Loop2:printf(是否继续?( 是y/否n) n); scanf(%s,c); if(strcmp(c,n)=0)break; else if(strcmp(c,y)!=0) printf(error!n);goto loop2; fclose(fp); menu(); void pj_enter() int j; char c2; FILE *fp; if(fp=fopen(data3.dat,wb)=NULL) printf(Can not open the file!n); exit(0); for(j=0;ji;j+)
9、fwrite(&pjj,sizeof(struct peijian),1,fp); while(1) printf(输入配件号:n); scanf(%d,&pji.num); printf(输入配件名:n); scanf(%s,pji.name); printf(输入配件颜色:n); scanf(%s,pji.color); printf(输入配件重量:n); scanf(%d,&pji.weight); printf(输入配件产地:n); scanf(%s,pji.area); if(fwrite(&pji+,sizeof(struct peijian),1,fp)!=1) printf(F
10、ile write errorn); else printf(Successful!n); Loop3:printf(Is there any more?( Yesy/Non) n); scanf(%s,c); if(strcmp(c,n)=0)break; else if(strcmp(c,y)!=0) printf(error!n);goto loop3; fclose(fp); menu(); void SET_enter () int j; char c2; FILE *fp; if(fp=fopen(data4.dat,wb)=NULL) printf(Can not open th
11、e file!n); exit(0); for(j=0;ji;j+) fwrite(&selj,sizeof(struct seller),1,fp); while(1) printf(输入销售商号:n); scanf(%d,&seli.num); printf(输入销售商名:n); scanf(%s,seli.name); printf(输入销售商状态:n); scanf(%s,seli.state); printf(输入销售商所在城市:n); scanf(%s,seli.city); if(fwrite(&seli+,sizeof(struct seller),1,fp)!=1) prin
12、tf(File write errorn); else printf(Successful!n); Loop4:printf(Is there any more?( Yesy/Non) n); scanf(%s,c); if(strcmp(c,n)=0)break; else if(strcmp(c,y)!=0) printf(error!n);goto loop4; fclose(fp); menu(); void enter() int t,m; do puts(tt*MENU*nn); puts(tttt1.sal_enter new data); puts(tttt2.build_en
13、ter new data); puts(tttt3.pj_enter new data); puts(tttt4.SET_enter new data); puts(tttt5.Exit); puts(nntt *n); printf(Choose the number(1-5): bb); scanf(%d,&m); if(m5) t=1; getchar(); else t=0; while(t=1); switch(m) case 1:sal_enter();break; case 2:build_enter();break; case 3:pj_enter();break; case
14、4:SET_enter();break; case 5:menu(); 4-3 删除模块【需求分析】 建立副菜单,选择要删除的是哪个文件中的信息,输入相应的信息,找到数据记录将其删除。做法是将数据从文件中删除,然后跳过已删除的项,重新写入文件。其流程图如下图4所示: 图4 删除模块流程图【程序】/*删除模块*/ void sal_delete() int j,v=0; int x; int w=101; FILE *fp; if(fp=fopen(data1.dat,rb)=NULL) printf(Can not open the file!n); menu(); loop:printf(请
15、输入要删除的销售商号码(输入0返回menu):); scanf(%d,&x); if(x=0) menu(); for(j=0;j100;j+) if(fread(&salj,sizeof(struct sale),1,fp)!=1) break; v=j+1; for(j=0;jv;j+) if(x=salj.num1) w=j;break; fclose(fp); if(w=101) printf(Cannot find the data!nn);goto loop; else fp=fopen(data1.dat,wb); for(j=0;jv;j+) if(j!=w) fwrite(&
16、salj,sizeof(struct sale),1,fp); printf(n销售商号码,配件号,工地号,数量n); printf(%d,tt%d,%d, %dn,salw.num1,salw.num2,salw.num3,salw.num4); printf(删除成功!nn); fclose(fp); menu(); void build_delete() int j,v=0,x; int w=101; FILE *fp; if(fp=fopen(data2.dat,rb)=NULL) printf(Can not open the file!n); menu(); loop:printf
17、(请输入要删除的工地号(输入0返回menu):); scanf(%d,&x); if(x=0) menu(); for(j=0;j100;j+) if(fread(&buildj,sizeof(struct building),1,fp)!=1) break; v=j+1; for(j=0;jv;j+) if(x=buildj.num) w=j;break; fclose(fp); if(w=101) printf(Cannot find the data!nn);goto loop; else fp=fopen(data2.dat,wb); for(j=0;jv;j+) if(j!=w) f
18、write(&buildj,sizeof(struct building),1,fp); printf(n项目号,工地号,工地名,城市名:n); printf( %d, t%d, %s, %sn,buildw.num1,buildw.num, buildw.name,buildw.city); printf(删除成功!nn); fclose(fp); menu(); void pj_delete() int j,v=0,x; int w=101; FILE *fp; if(fp=fopen(data3.dat,rb)=NULL) printf(Can not open the file!n);
19、 menu(); loop:printf(请输入要删除的配件号(输入0返回menu):); scanf(%d,&x); if(x=0) menu(); for(j=0;j100;j+) if(fread(&pjj,sizeof(struct peijian),1,fp)!=1) break; v=j+1; for(j=0;jv;j+) if(x=pjj.num) w=j;break; fclose(fp); if(w=101) printf(Cannot find the data!nn);goto loop; else fp=fopen(data3.dat,wb); for(j=0;jv;j
20、+) if(j!=w) fwrite(&pjj,sizeof(struct peijian),1,fp); printf(n配件号,配件名,颜色,重量,产地:n); printf( %d, %s, %s, %d, %sn,pjw.num,pjw.name,pjw.color,pjw.weight,pjw.area); printf(删除成功!nn); fclose(fp); menu(); void SET_delete () int j,v=0;int x; int w=101; FILE *fp; if(fp=fopen(data4.dat,rb)=NULL) printf(Can not
21、 open the file!n); menu(); loop:printf(请输入号码(输入0返回menu):); scanf(%d,&x); if(x=0) menu(); for(j=0;j100;j+) if(fread(&selj,sizeof(struct seller),1,fp)!=1) break; v=j+1; for(j=0;jv;j+) if(x=selj.num) w=j;break; fclose(fp); if(w=101) printf(Cannot find the data!nn);goto loop; else fp=fopen(data4.dat,wb)
22、; for(j=0;jv;j+) if(j!=w) fwrite(&selj,sizeof(struct seller),1,fp); printf(n销售商号码,销售商名字,状态,城市: n); printf( %d,tt%s,t%s, %sn,selw.num,selw.name,selw.state,selw.city); printf(删除成功!nn); fclose(fp); menu(); void delete() int t,m; do puts(tt*MENU*nn); puts(ttt1.sal_delete new data); puts(ttt2.build_delet
23、e new data); puts(ttt3.pj_delete new data); /*删除菜单*/ puts(ttt4.SET_delete new data); puts(ttt5.Exit); puts(nntt *n); printf(Choose the number(1-5): bb); scanf(%d,&m); if(m5) t=1; getchar(); else t=0; while(t=1); switch(m) case 1:sal_delete();break; case 2:build_delete();break; case 3:pj_delete();bre
24、ak; case 4:SET_delete ();break; case 5:menu(); 4-4 查找模块【需求分析】 该模块的功能事根据输入的信息号码查找对应的记录。选择合适的查找方式,输入相应的数据从而找出对应的数据。其流程图如下图5所示: 图5 查找模块流程图【程序】/*查找模块*/ void search() int i,w=101,j,x,h=0; FILE *fp; printf(1-By 销售商号码n); printf(2-By 工地号n); printf(3-By 配件号n); printf(4-By 销售商号n); printf(5 返回nn); loop9:printf(请选择项:n); scanf(%d,&x); if(x=5) menu(); else if(x5) printf(Error!n);goto loop9; else if(x=3) if(fp=fopen(d