C语言课程设计报告班级:中国地质大学计算机学院192091班姓名:刘宇豪序号:192091—28(20091003872)指导老师:朱莉老师时间:2010-06-10C语言课程设计第2页共20页一.题目要求:【题目】建筑工地信息管理系统【要求】建立如下四个文件(括号内为文件中每条信息记录的字段内容):(1)销售商-配件-建筑工地(销售商号码,配件号,工地号,数量)(2)建筑工地(工地号,名字,城市)(3)配件(配件号,配件名,颜色,重量,产地)(4)销售商(号码,名字,状态,城市)功能:(1)首先建立文件,然后插入数据,并进行删除、更新操作,最后进行查询操作。(2)查询与供应商所在城市相同的零件-供应商,项目-供应商记录对。二.课程分析:根据题目要求,配件号工地号等的存储要用到数据,工地名配件名等的存储则需要字符数组;由于要用到一些标准函数,因此还应该包含#includestdlib.h#includestring.h#includestdio.h等头文件;除了库函数外,还需定义一些函数,在形成主菜单等处将会用到;在储存各种信息需建立结构体,使与配件或工地或销售商各自相关的信息整体化;还应该有显示、查询、删除、修改等操作,以实现要求的功能;还应提供选择菜单以实现功能选择,并在适当的地方添加提示语句,使程序更加清晰,各模块更加独立,可读性增强。又由要求可知,可将整个程序分为三个模块,即:增加信息、修改信息、查询信息几大模块;同时在各模块功能执行完后都能返回主菜单,可随时从任一模块开始运行,使各模块充分独立,使程序更加灵活。其系统功能模块图如下:C语言课程设计第3页共20页三.详细设计:1.头文件及结构体定义:#includestdio.h#includestdlib.h#includestring.hstructbuilding{charname[20];/*工地名称*/charnum[20];/*工地号*/charcity[20];/*工地所在城市*/};structpeijian{charp_name[20];/*配件名称*/charp_num[20];/*配件号码*/charp_colour[20];/*配件颜色*/charp_weight[20];/*配件重量*/charp_area[20];/*配件产地*/};structbusiness{charb_name[20];/*销售商名字*/charb_num[20];/*销售商号码*/charb_state[20];/*销售状态*/charb_city[20];/*所在城市*/};structtotal{charb_num[20];/*销售商号码*/charp_num[20];/*配件号*/charnum[20];/*工地号*/charnum2[20];/*销售商为工地提供配件数量*/};建筑工地信息管理系统增加信息删除信息修改信息查询信息C语言课程设计第4页共20页2.主函数:voidmain(){intn;printf(/*****************************建筑工地信息管理系统*****************************/\n);printf(/*****************************制作:刘宇豪*******************************/\n);while(n!=15){printf(1.增加建筑工地信息\n2.增加配件信息\n3.增加销售商信息\n4.增加销售商-配件-建筑工地信息\n5.修改建筑工地信息\n6.修改配件信息\n7.修改销售商信息\n8.修改销售商-配件-建筑工地信息\n9.删除建筑工地信息\n10.删除配件信息\n11.删除销售商信息\n12.删除销售商-配件-建筑工地信息\n13.查询与供应商所在城市相同的零件-供应商记录对\n14.查询与供应商所在城市相同的项目-供应商记录对\n15.退出系统\n请选择:);scanf(%d,&n);if(n==1)add1();elseif(n==2)add2();elseif(n==3)add3();elseif(n==4)add4();elseif(n==5)find1();elseif(n==6)find2();elseif(n==7)find3();elseif(n==8)find4();elseif(n==9)del1();elseif(n==10)del2();elseif(n==11)del3();elseif(n==12)del4();elseif(n==13)seek1();elseif(n==14)seek2();}YNNY开始显示一系列功能选项输入n,判断n是否为15?根据n的值调用函数结束判断是否为1~14C语言课程设计第5页共20页}3.增加信息函数:voidadd1()/*定义增加建筑工地信息的函数*/{charflag='y';structbuildingbuild;/*调用建筑工地信息结构体*/FILEfp;/定义文件指针*/if((fp=fopen(d:/c.txt,a+b))==NULL)/*建立存储信息的文本文件*/{exit(0);/*退出*/}while(flag=='y'){printf(请输入建筑工地名称:);scanf(%s,build.name);printf(请输入建筑工地编号:);scanf(%s,build.num);printf(请输入工地所在城市:);scanf(%s,build.city);fwrite(&build,sizeof(structbuilding),1,fp);printf(是否继续y/n:\n);scanf(%c,&flag);}fclose(fp);/*关闭文件*/}voidadd2()/*定义增加配件信息的函数*/{charflag='y';structpeijianpj;/*调用配件信息结构体*/FILE*fp;if((fp=fopen(d:/d.txt,a+b))==NULL)/*建立存储配件信息的文本文件*/{exit(0);/*退出*/}while(flag=='y'){printf(请输入配件名称:);scanf(%s,pj.p_name);printf(请输入配件编号:);scanf(%s,pj.p_num);printf(请输入配件颜色:);scanf(%s,pj.p_colour);YN读入配件等的信息并储存是否继续回到主函数建立文本文件定义文件指针,调用相应结构体C语言课程设计第6页共20页printf(请输入配件重量:);scanf(%s,pj.p_weight);printf(请输入配件产地:);scanf(%s,pj.p_area);fwrite(&pj,sizeof(structpeijian),1,fp);printf(是否继续y/n:\n);scanf(%c,&flag);}fclose(fp);/*关闭文件*/}voidadd3()/*定义增加销售商信息的函数*/{charflag='y';structbusinessbus;/*调用销售商信息结构体*/FILE*fp;if((fp=fopen(d:/e.txt,a+b))==NULL)/*建立存储销售商信息的文本文件*/{exit(0);/*退出*/}while(flag=='y'){printf(请输入销售商名称:);scanf(%s,bus.b_name);printf(请输入销售商编号:);scanf(%s,bus.b_num);printf(请输入销售商状态:);scanf(%s,bus.b_state);printf(请输入销售商所在城市:);scanf(%s,bus.b_city);fwrite(&bus,sizeof(structbusiness),1,fp);printf(是否继续y/n:\n);scanf(%c,&flag);}fclose(fp);/*关闭文件*/}voidadd4()/*定义联系的信息函数*/{charflag='y';structtotalbpb;/*调用结构体*/FILE*fp;if((fp=fopen(d:/f.txt,a+b))==NULL)/*建立存储信息的文本文件*/{C语言课程设计第7页共20页exit(0);/*退出*/}while(flag=='y'){printf(请输入销售商号码:);scanf(%s,bpb.b_num);printf(请输入配件编号:);scanf(%s,bpb.b_num);printf(请输入建筑工地编号:);scanf(%s,bpb.num);printf(请输入销售商为工地提供配件数量:);scanf(%s,bpb.num2);fwrite(&bpb,sizeof(structtotal),1,fp);printf(是否继续y/n:\n);scanf(%c,&flag);}fclose(fp);/*关闭文件*/}4.修改信息函数:voidfind1()/*定义修改建筑工地信息的函数*/{FILEfp;/*定义文件指针*/structbuildingbuild;/*调用结构体*/charflag='y',find;charname[20];if((fp=fopen(d:/c.txt,r+w))==NULL)/*判断是否存在文件*/{printf(\n\tThesystemcan'topenthefile!!);return;/*回到主函数*/}elsewhile(flag=='y'){printf(请输入您要修改的建筑工地名称:);scanf(%s,name);find='n';rewind(fp);while((fread(&build,sizeof(build),1,fp))==1&&find=='n'){if(strcmp(name,build.name)==0)/*判断文件中是否有该信息*/{find='y';break;C语言课程设计第8页共20页}}if(find=='y'){printf(建筑工地名称:%s\n,build.name);printf(建筑工地编号:%s\n,build.num);printf(建筑工地所在城市:%s\n,build.city);printf(请输入建筑工地名称:);scanf(%s,build.name);printf(请输入建筑工地编号:);scanf(%s,build.num);printf(请输入建筑工地所在城市:);scanf(%s,build.city);fseek(fp,-(long)(sizeof(structbuilding)),1);/*文件标记向下*/fwrite(&build,sizeof(build),1,fp);/*保存信息*/}printf(是否继续y/n:);/*提示是否继续修改另一建筑工地信息*/scanf(%c,&flag);}fclose(fp);/*关闭文件*/}voidfind2()/*定义修改配件信息的函数*/{FILE*fp;structpeijianpj;charflag='y',find;charname[20];if((fp=fopen(d:/d.txt,r+w))==NULL){printf(\n\tThesystemcan'topenthefile!!\n);return;}elsewhile(flag=='y'){printf(请输入您要修改的配件名称:);scanf(%s,name);find='n';rewind(fp);while((fread(&pj,sizeof(pj),1,fp))==1&&find=='n')C语言课程设计第9页共20页{if(strcmp(pj.p_name,name)==0){find='y';break;}}if(find=='y'){printf(配件名称:%s\n,pj.p_name);printf(配件编