




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中 国 地 质 大 学本科生课程论文封面课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录课程设计评语2目 录31课程论文题目42程序设计思路43功能模块图54数据结构设计55算法设计66程序代码137程序运行结果228编程中遇到的困难及解决方法259总结心得及良好建议2610致谢261 课程论文题目 建筑工地信息管理系统要求建立如下4个文件(括号内为每条记录地字段内容):(1) 销售商-配件-建筑工地(销售商号码,配件号,工地号,数量)(2) 建筑工地(工地号,名字,城市)(3) 配件(配件号,颜色,重量,产地)(4) 销售商(号码,名字,状态,城市)功能:(1) 首先建立文件,然后插入数据,并进行删除、更新操作,最后进行查询操作。(2) 查询与供应商所在城市相同的零件-供应商,项目-供应商记录对。2程序设计思路程序中四个文件是并列的,对每一个文件的插入、删除、更新、查询数据的操作是一样的,在此只介绍第一个文件的各种操作。四项功能:插入,删除,更新,查询。3功能模块图 主函数根据用户的需求来选择调用不同的函数。 查询 更新 删除 插入4数据结构设计数据信息以文件的形式存放,一条记录对应一个销售商的信息,选择结构体数组来存放信息,如下:struct xhs_pj_jzgd/*定义“销售商-配件-建筑工地”结构体*/ char xnum15;char pnum15;char gnum15; int amount;5算法设计1. 主函数 主函数提供建立文件,插入、删除、更新、查询数据的函数调用。每个功能模块用菜单方式选择。设置一个menu()函数,再用主函数调用menu()函数,使系统执行完每部分功能模块后能够方便返回到系统界面。流程图建立文件显示一系列功能选项导入数据 输入sel,判断sel是否1-21 NY根据sel值调用各功能模块2. 各功能模块设计(1)添加数据:输入销售商的信息 比较当前信息与原信息是否重合NY输入删除的号码(2)删除数据:保存到文件查找是否存在该号码NY删除该组数据输入要修改的号码(3)修改数据:查找是否存在该信息N Y输入新信息保存到文件查找是否存在该信息输入要查询的号码(4)查询信息:N输出该组信息 Y6程序代码#include #include /*在内存的动态存储区中分配空间*/#include int shouldsave1=0,shouldsave2=0,shouldsave3=0,shouldsave4=0;struct xhs_pj_jzgd/*定义“销售商-配件-建筑工地”结构体*/ char xnum15;char pnum15;char gnum15; int amount; typedef struct node1/*用NODE1代替已有结构体*/ struct xhs_pj_jzgd data; struct node1 *next; Node1,*Link1; struct jzgd/*定义“建筑工地”结构体*/ char gnum15;char gname16;char gcity16;typedef struct node2/*用NODE2代替已有结构体*/ struct jzgd data; struct node2 *next; Node2,*Link2; struct pj/*定义“配件”结构体*/char pnum15;char pname20;char color5;int weight;char product_place16;typedef struct node3/*用NODE3代替已有结构体*/ struct pj data; struct node3 *next; Node3,*Link3; struct xhs/*定义“销售商”结构体*/char xnum15;char xname20;char state15;char xcity16;typedef struct node4/*用NODE4代替已有结构体*/ struct xhs data; struct node4 *next; Node4,*Link4; /说明:显示MENU/返回值:void/void menu() printf(*主菜单*n); printf(1.添加销售商-配件-建筑工地信息 2.删除销售商-配件-建筑工地信息n); printf(3.查询销售商-配件-建筑工地信息 4.修改销售商-配件-建筑工地信息n); printf(5.保存销售商-配件-建筑工地信息 6.添加建筑工地信息n); printf(7.删除建筑工地信息 8.查询建筑工地信息n);printf(9.修改建筑工地信息 10.保存建筑工地信息n);printf(11.添加配件信息 12.删除配件信息n); printf(13.查询配件信息 14.修改配件信息n); printf(15.保存配件信息 16.添加销售商信息n); printf(17.删除销售商信息 18.查询销售商信息n);printf(19.修改销售商信息 20.保存销售商信息n);printf(21.查询与供应商所在城市相同的零件-供应商,项目-供应商记录对n);printf(0.退出系统n);printf(*n); /函数名称:printe1/说明:用于输出信息/入口参数:结构体数组Node1/返回值:void/void printe1(Node1 *p) printf(%5s %5s %5s %5dn,p-data.xnum,p-data.pnum,p-data.gnum,p-data.amount); /函数名称:Locate1/说明:用于定位链表中符合要求的结点,并返回该指针/入口参数:Link1 l,char findmess1,char findmess2,findmess3/返回值:Node/Node1 *Locate1(Link1 l,char findmess1,char findmess2,char findmess3) Node1 *r; r=l-next; while(r!=NULL) if(strcmp(r-data.xnum,findmess1)=0&strcmp(r-data.pnum,findmess2)=0&strcmp(r-data.gnum,findmess3)=0) return r; r=r-next; return NULL; /函数名称:Add1/说明:增加 销售商-配件-建筑工地 信息/入口参数:/返回值:void/void Add1(Link1 l) Node1 *p,*r,*s; char xnum15;char pnum15;char gnum15;r=l; s=l-next; while(r-next!=NULL) r=r-next; /*将指针置于最末尾*/while(1) printf(请你输入销货商号码:(输入0返回上一级菜单); scanf(%5s,xnum); getchar();if(strcmp(xnum,0)=0) break; printf(请你输入配件号:(输入0返回上一级菜单); scanf(%5s,pnum); getchar();if(strcmp(pnum,0)=0) break; printf(请你输入工地号:(输入0返回上一级菜单); scanf(%5s,gnum); getchar();if(strcmp(gnum,0)=0) break; while(s) if(strcmp(s-data.xnum,xnum)=0&strcmp(s-data.pnum,pnum)=0&strcmp(s-data.gnum,gnum)=0) printf(=提示:销货商号码为%5s,配件号为%5s,工地号为%5s的数量信息已存在,若要修改请你选择4修改!n,xnum,pnum,gnum); printf(-n); printf(销售商号码 配件号 工地号 数量nnn); printe1(s); printf(-n); printf(n); return; s=s-next; p=(Node1 *)malloc(sizeof(Node1); strcpy(p-data.xnum,xnum); strcpy(p-data.pnum,pnum);strcpy(p-data.gnum,gnum);printf(请您输入数量:); scanf(%5d,&p-data.amount); getchar(); /*信息输入已经完成*/p-next=NULL; r-next=p; r=p; shouldsave1=1; /函数名称:Delete1/说明:删除 销售商-配件-建筑工地 信息/入口参数:/返回值:void/void Delete1(Link1 l) Node1 *p,*r; char findmess115,findmess215,findmess315; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(请你输入要删除的销售商号码:); scanf(%5s,findmess1); getchar();printf(请你输入要删除的配件号:); scanf(%5s,findmess2); getchar();printf(请你输入要删除的工地号:); scanf(%5s,findmess3); getchar();p=Locate1(l,findmess1,findmess2,findmess3); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该销售商-配件-建筑工地信息已经成功删除!n); shouldsave1=1; else printf(n=提示:没有找到该 销售商-配件-建筑工地 信息!n); /函数名称:Modify1/说明:修改 销售商-配件-建筑工地 信息/入口参数:/返回值:void/void Modify1(Link1 l) Node1 *p; char findmess115,findmess215,findmess315; if(!l-next) /*没有找到相应的信息*/ printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的销货商号码:); scanf(%5s,findmess1); getchar();printf(请你输入要修改的配件号:); scanf(%5s,findmess2); getchar();printf(请你输入要修改的工地号:); scanf(%5s,findmess3); getchar();p=Locate1(l,findmess1,findmess2,findmess3); if(p) printf(请你输入新销货商号码(原来是%s):,p-data.xnum); scanf(%5s,p-data.xnum); getchar();printf(请你输入新配件号(原来是%s):,p-data.pnum); scanf(%5s,p-data.pnum); getchar(); printf(请你输入新工地号(原来是%s):,p-data.gnum); scanf(%5s,p-data.gnum); getchar();printf(请你输入新数量(原来是%d):,p-data.amount); scanf(%5d,&p-data.amount); getchar();printf(n=提示:资料修改成功!n); shouldsave1=1; else printf(n=提示:没有找到该销售商-配件-建筑工地信息!n); /函数名:Query1/说明:查询 销售商-配件-建筑工地 信息/入口参数:/返回值:void/void Query1(Link1 l) char findmess115,findmess215,findmess315; Node1 *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(请你输入要查询的销售商号码:); scanf(%5s,findmess1); getchar();printf(请你输入要查询的配件号:); scanf(%5s,findmess2); getchar();printf(请你输入要查询的工地号:); scanf(%5s,findmess3); getchar();p=Locate1(l,findmess1,findmess2,findmess3); if(p) printf(tttt查找结果:n); printf(-n); printf(销售商号码 配件号 工地号 数量nnn ); printe1(p); printf(-n); else printf(n=提示:没有找到该 销售商-配件-建筑工地 信息!n); /函数名称:Save1/说明:保存 销售商-配件-建筑工地 信息/入口参数:/返回值:void/void Save1(Link1 l) FILE* fp; Node1 *p; int flag=1,count=0; fp=fopen(c:file1.txt,wb); /*以写的方式打开二进制文件*/if(fp=NULL) printf(n=提示:重新打开销售商-配件-建筑工地文件时发生错误!n); exit(1); p=l-next; while(p) if(fwrite(p,sizeof(Node1),1,fp)=1) p=p-next; count+; else flag=0; break; if(flag) printf(n=提示:销售商-配件-建筑工地文件保存成功!(有%d条记录已经保存.)n,count); shouldsave1=0; fclose(fp); /函数名称:printe2/说明:用于输出信息/入口参数:结构体数组Node2/返回值:void/void printe2(Node2 *p) printf(%5s %5s %5s n,p-data.gnum,p-data.gname,p-data.gcity); /函数名称:Locate2/说明:用于定位链表中符合要求的结点,并返回该指针/入口参数:Link2 l,char findmess,char nameorum/返回值:Node/Node2 *Locate2(Link2 l,char findmess,char nameornum) Node2 *r; r=l-next; if(strcmp(nameornum,num)=0) /*按工地号查询*/ r=l-next; while(r!=NULL) if(strcmp(r-data.gnum,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /*按名字查询*/ r=l-next; while(r!=NULL) if(strcmp(r-data.gname,findmess)=0) return r; r=r-next; return 0; /函数名称:Add2/说明:增加 建筑工地 信息/入口参数:/返回值:void/void Add2(Link2 l) Node2 *p,*r,*s; char gnum15;r=l; s=l-next; while(r-next!=NULL) r=r-next; /*将指针置于最末尾*/while(1) printf(请你输入工地号:(输入0返回上一级菜单); scanf(%5s,gnum); getchar();if(strcmp(gnum,0)=0) break; while(s) if(strcmp(s-data.gnum,gnum)=0) printf(=提示:销货商号码为%5s的建筑工地信息已存在,若要修改请你选择9修改!n,gnum); printf(-n); printf(工地号 名字 城市nnn); printe2(s); printf(-n); printf(n); return; s=s-next; p=(Node2 *)malloc(sizeof(Node2); strcpy(p-data.gnum,gnum); printf(请你输入名字:); scanf(%5s,p-data.gname); getchar();printf(请你输入城市:); scanf(%5s,p-data.gcity); getchar();/*信息输入已经完成*/p-next=NULL; r-next=p; r=p; shouldsave2=1; /函数名称:Delete2/说明:删除 建筑工地 信息/入口参数:/返回值:void/void Delete2(Link2 l) int sel; Node2 *p,*r; char findmess16; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(n=1按工地号删除n=2按名字删除n); scanf(%d,&sel); getchar();if(sel=1) printf(请你输入要删除的工地号:); scanf(%5s,findmess); p=Locate2(l,findmess,num); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该 建筑工地 信息已经成功删除!n); shouldsave2=1; else printf(n=提示:没有找到该建筑工地信息!n); else if(sel=2) printf(请你输入要删除的名字:); scanf(%5s,findmess); p=Locate2(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该 建筑工地 信息已经成功删除!n); shouldsave2=1; else printf(n=提示:没有找到该建筑工地信息!n); else printf(n=提示:输入错误,请重新输入!n); /函数名称:Modify2/说明:修改 建筑工地 信息/入口参数:/返回值:void/void Modify2(Link2 l) Node2 *p; char findmess15; if(!l-next) /*没有找到相应的信息*/ printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的工地号:); scanf(%5s,findmess); getchar();p=Locate2(l,findmess,num); if(p) printf(请你输入新工地(原来是%s):,p-data.gnum); scanf(%5s,p-data.gnum); getchar();printf(请你输入新名字(原来是%s):,p-data.gname); scanf(%5s,p-data.gname); getchar(); printf(请你输入新城市(原来是%s):,p-data.gcity); scanf(%5s,p-data.gcity); getchar();printf(n=提示:资料修改成功!n); shouldsave2=1; else printf(n=提示:没有找到建筑工地信息!n); /函数名:Query2/说明:查询 建筑工地 信息/入口参数:/返回值:void/void Query2(Link2 l) int sel;/*查询时输入相应选择的变量*/char findmess16; Node2 *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按工地号查找n=2按名字查找n); scanf(%d,&sel);getchar(); if(sel=1)/*通过工地号查找*/ printf(请你输入要查找的工地号:); scanf(%5s,findmess); p=Locate2(l,findmess,num); if(p) printf(tttt查找结果:n); printf(-n); printf(工地号 名字 城市nnn); printe2(p); printf(-n); else printf(n=提示:没有找到该建筑工地信息!n); else if(sel=2) /*通过名字查找*/ printf(请你输入要查找的名字:); scanf(%5s,findmess); p=Locate2(l,findmess,name); if(p) printf(ttt查找结果n); printf(-n); printf(工地编号 名字 城市nnn); printe2(p); printf(-n); else printf(n=提示:没有找到该建筑工地信息!n);elseprintf(n=提示:输入错误!n); /函数名称:Save2/说明:保存 建筑工地 信息/入口参数:/返回值:void/void Save2(Link2 l) FILE* fp; Node2 *p; int flag=1,count=0; fp=fopen(c:file2.txt,wb); if(fp=NULL) printf(n=提示:重新打开工地文件文件时发生错误!n); exit(1); p=l-next; while(p) if(fwrite(p,sizeof(Node2),1,fp)=1) p=p-next; count+; else flag=0; break; if(flag) printf(n=提示:建筑工地文件保存成功!(有%d条记录已经保存.)n,count); shouldsave2=0; fclose(fp); /函数名称:printe3/说明:用于输出信息/入口参数:结构体数组Node3/返回值:void/void printe3(Node3 *p) printf(%5s %5s %5s %5d %5sn,p-data.pnum,p-data.pname,p-data.color,p-data.weight,duct_place); /函数名称:Locate3/说明:用于定位链表中符合要求的结点,并返回该指针/入口参数:Link3 l,char findmess,char nameorum/返回值:Node/Node3 *Locate3(Link3 l,char findmess,char nameornum) Node3 *r; r=l-next; if(strcmp(nameornum,num)=0) /*按配件号查询*/ r=l-next; while(r!=NULL) if(strcmp(r-data.pnum,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /*按配件名查询*/ r=l-next; while(r!=NULL) if(strcmp(r-data.pname,findmess)=0) return r; r=r-next; return 0; /函数名称:Add3/说明:增加 配件 信息/入口参数:/返回值:void/void Add3(Link3 l) Node3 *p,*r,*s; char pnum15;r=l; s=l-next; while(r-next!=NULL) r=r-next; /*将指针置于最末尾*/while(1) printf(请你输入配件号:(输入0返回上一级菜单); scanf(%5s,pnum); getchar();if(strcmp(pnum,0)=0) break; while(s) if(strcmp(s-data.pnum,pnum)=0) printf(=提示:配件号为%5s的配件信息已存在,若要修改请你选择14修改!n,pnum); printf(-n); printf(配件号 配件名 颜色 重量 产地nnn); printe3(s); printf(-n); printf(n); return; s=s-next; p=(Node3 *)malloc(sizeof(Node
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年文化旅游演艺项目成功案例解析与运营模式创新报告
- 2025年深远海风电场规划与海上风能资源评估技术引进与自主创新能力提升报告
- 2025年新能源商用车辆市场新能源汽车充电桩市场智能化应用:市场需求与应用场景报告001
- 山东省枣庄市第三十九中学2024-2025学年上学期阶段性诊断检测七年级数学试题(无答案)
- 网络商城和公司转让居间合同
- 四年级 党规党章进课堂教学计划
- 2025年AI应用市场洞察分析报告
- 岩石矿产与课件
- 岩土勘察测量培训课件
- 小黄鹂鸟课件
- 2025年疫苗上岗证考试题及答案
- 2025中国载人eVTOL行业白皮书
- 2025中国人民抗日战争纪念馆招聘4人考试模拟试题及答案解析
- 2025年老年康复科老年康复护理技能评估试卷答案及解析
- 征地拆迁面试题目及答案
- 果树栽培工专业技能考核试卷及答案
- 航空科普课件
- 2025广西壮族自治区药用植物园招聘高层次人才21人备考试题及答案解析
- 2025-2026学年人教版(2024)初中地理八年级上册教学计划及进度表
- 电气运行基础知识培训课件
- 水工闸门操作培训
评论
0/150
提交评论