高级语言程序设计说明书建筑工地信息管理系统Word下载.docx
《高级语言程序设计说明书建筑工地信息管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计说明书建筑工地信息管理系统Word下载.docx(50页珍藏版)》请在冰豆网上搜索。
1、需求分析:
信息采用文件存储,因而要提供文件的输入输出操作;
要插入数据,因而要提供数据的添加操作;
要实现数据的删除、更新和查询,因而要提供文件记录的删除、修改和查找操作;
另外要提供键盘式选择菜单以实现功能选择。
2、总体设计:
整个系统可以被设计为数据输入模块、数据添加模块、数据删除模块、数据查询并修改模块、配对模块。
数据添加模块
图1系统功能模块图
4、详细设计
一、主函数
【分析】主函数一般设计得比较简便,只提供输入、处理和输出部分的函数调用。
其中各功能模块用菜单方式选择。
voidmenu()f1()f11()
{{·
·
{·
do{do{·
switch(c)switch(c)}
{case1:
f1();
break;
f11();
case2:
f2();
f12();
case3:
case3:
f13();
case4:
f14();
case5:
exit(0);
back=0;
default:
}default:
}
}while
(1);
·
}}
图
(2)
【程序】
/************************主菜单*********************************/
voidmenu()
{
intw;
do
{
system("
cls"
);
printf("
\t\t****************MENU*******************\n\n"
\t\t\t\t1.输入\n"
/*输入*/
\t\t\t\t2.删除\n"
/*删除*/
\t\t\t\t3.查找与修改\n"
/*查找与修改*/
\t\t\t\t4.配对\n"
/*查找配对*/
\t\t\t\t5.添加\n"
\t\t\t\t6.退出"
\n\n\t\t**************************************\n"
Chooseyournumber(1-6):
[]\b\b"
scanf("
%d"
&
w);
switch(w)
case1:
enter();
Delete();
search();
search2();
add();
case6:
}
}while
(1);
}
voidmain()
{
color0a9"
start();
PAUSE"
menu();
二、各功能模块设计
(1)数据输入模块
【分析】数据信息存放在文件中,用结构体存放,方便数据输入与数据的保存。
另外,输入模块中建立副菜单,用以输入四个文件的信息选项。
【程序】
(以输入销售商结构体信息为例)
/*****************************数据输入模块************************************/
voidSEL_enter()
intj;
charc[2];
FILE*fp;
if((fp=fopen("
data4.txt"
"
w"
))==NULL)
{printf("
Cannotopenthefile!
\n"
for(j=0;
j<
i;
j++)
{fwrite(&
sel[j],sizeof(structseller),1,fp);
while
(1){
printf("
\n输入销售商号:
"
scanf("
%s"
sel[i].num);
\n输入销售商名:
sel[i].name);
\n输入销售商所在城市:
sel[i].city);
if(fwrite(&
sel[i++],sizeof(structseller),1,fp)!
=1)
\nFilewriteerror\n"
elseprintf("
Successful!
^-^\n"
是否继续?
[y/n]:
c);
if(strcmp(c,"
n"
)==0||strcmp(c,"
N"
)==0)break;
fclose(fp);
system("
voidenter()
{intm,back;
do{system("
\t\t***************MENU*************\n\n"
\t以下符号:
[S]-项目、[B]-建筑工地、[P]-配件、[SEL]-销售商\n"
\t\t\t\t1.输入数据到S\n"
\t\t\t\t2.输入数据到B\n"
\t\t\t\t3.输入数据到P\n"
/***************输入菜单****************/
\t\t\t\t4.输入数据到SEL\n"
\t\t\t\t5.返回"
\n\n\t\t********************************\n"
请选择(1-5):
m);
switch(m){
sal_enter();
build_enter();
pj_enter();
SEL_enter();
case5:
default:
if(back==0)break;
}while
(1);
}
(2)删除模块
【分析】建立副菜单,选择要删除的是哪个文件中的信息,输入相应的信息,找到数据将其删除。
一般的做法是将数据从文件中删除,删除位置后面的记录往前移。
模块如:
图(3)删除模块流程图
(以删除销售商结构体信息为例)
/******************************删除模块************************************/
voidSEL_delete()
intj,v,flag=0;
chara[5],c[2];
FILE*fp;
r"
))==NULL)
{
\n打开文件失败!
exit(0);
do
请输入号码:
a);
for(j=0;
100;
if(fread(&
sel[j],sizeof(structseller),1,fp)!
=1)break;
fclose(fp);
fp=fopen("
v=j;
v;
if(strcmp(sel[j].num,a)==0)
{
printf("
\n销售商号码,销售商名字,城市:
\n"
%s%s%s"
sel[j].num,sel[j].name,sel[j].city);
for(i=j;
i<
i++)sel[i]=sel[i+1];
flag=1;
}
if(flag==0)printf("
Cannotfindthedata!
是否继续[y/n]:
if(strcmp(c,"
j++)
fwrite(&
voidDelete()
intm,back;
\t\t\t\t1.删除数据到S\n"
\t\t\t\t2.删除数据到B\n"
\t\t\t\t3.删除数据到P\n"
/*********删除菜单****************/
\t\t\t\t4.删除数据到SEL\n"
switch(m)
sal_delete();
build_delete();
pj_delete();
SEL_delete();
(3)查找与修改模块
【分析】选择查找方式,输入相应的数据然后找出对应的数据。
模块流程图:
图(4)查找修改模块流程图
(以查找修改销售商结构体信息为例)
/****************************查找与修改模块*****************************/
voidSEL_search()
intj,k=0,flag=0;
structsellerp1[100],p2[100];
\n请输入要查找的销售商号:
!
feof(fp);
fread(&
p1[j],sizeof(structseller),1,fp);
if(strcmp(p1[j].num,a)==0)
{
\n销售商号:
%s\n"
p1[j].num);
销售商名:
p1[j].name);
所在城市名:
p1[j].city);
---------------------------------\n"
}
\n是否修改[y/n]:
y"
Y"
)==0)
printf("
\n销售商号:
p2[k].num);
strcpy(p1[j].num,p2[k].num);
\n销售商名:
p2[k].name);
strcpy(p1[j].name,p2[k].name);
\n所在城市名:
p2[k].city);
strcpy(p1[j].city,p2[k].city);
k++;
successful!
//elsecontinue;
for(k=0;
k<
j;
k++)
p1[k],sizeof(structseller),1,fp);
if(flag==0)
没有要找的数据!
voidsearch()
intback,w;
\t\t\t\t1.by项目号\n"
\t\t\t\t2.by工地号\n"
\t\t\t\t3.by配件号\n"
/*********查找与修改菜单****************/
\t\t\t\t4.by销售商号\n"
\t\t\t\t5.返回"
switch(w)
sal_search();
build_search();
pj_search();
SEL_search();
(4)查找配对模块
【分析】功能跟查找大致相同,输入要配对的相应信息,找出要的信息。
图(5)查找配对模块流程图
(以查找配件-供应商信息为例)
/********************************查找配对模块*****************************/
voidfind1()
intm=0,n,k;
intflag=0;
FILE*fp,*fp1,*fp2;
data1.txt"
if((fp1=fopen("
data3.txt"
if((fp2=fopen("
sal[m],sizeof(structsale),1,fp);
for(n=0;
feof(fp1);
n++)
fread(&
pj[n],sizeof(structpeijian),1,fp1);
if(strcmp(pj[n].num,sal[m].num2)==0)break;
for(k=0;
feof(fp2);
sel[k],sizeof(structseller),1,fp2);
if(strcmp(sel[k].num,sal[m].num1)==0)break;
if(strcmp(sel[k].city,pj[n].area)==0)
销售商号码:
sel[k].num);
配件号:
pj[n].num);
flag=1;
m++;
}while(!
feof(fp));
没有配对项!
fclose(fp1);
fclose(fp2);
5、上机操作
(1)主菜单函数
图(6)主菜单
(2)数据输入模块
图(7)输入副菜单
(3)删除模块
图(8)删除模块
(4)查找模块
图(9)查找修改模块
(5)添加模块
图(10)添加模块
(6)查找配对模块
图13查找配对模块
后记
这次课程设计,让我对C语言编程有了更进一步的认识,巩固了C语言的基本功,同时体会到:
做好一件事是不容易的,要找准方向并付出最大努力,才有好的收获!
我原本以为计算机二级过了,编程就没多大问题了,通过这次课设,我才明白考试只是一种形式,真正能检验实力还是实践。
能看懂程序并不代表会写程序,看程序和写程序之间需要很长的路要走。
我觉得这次课设主要是对基本知识的综合应用,并引入模块化程序设计的思想。
比如我这个《建筑工地信息管理系统》,主要是用do、for循环和switch结构以文件为中间平台,使各模块之间能够数据共享,而不需要传值或传地址调用,降低了模块间的耦合性。
应该说这次课设是为以后学习软件技术奠基。
最后需要说明的是,这个程序还没有达到理想的效果,希望各位能够提供些帮助和建议!
参考文献
[1]谭浩强.C程序设计(第二版).北京:
清华大学出版社,1999
[2]王新孙雷.C语言课程设计.北京:
清华大学出版社,2009
[3]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
附录:
源程序清单
/**********文件*************
data1.txt
data2.txt
data3.txt
data4.txt*/
#include<
stdio.h>
stdlib.h>
malloc.h>
string.h>
//#include<
iomanip>
#defineSPACE0x3920
#defineESC0x011b
inti=0;
structsale/*定义销售商-配件-建筑工地*/
charnum1[5];
/*销售商号码*/
charnum2[5];
/*配件号*/
charnum3[5];
/*工地号*/
intnum;
/*数量*/
}sal[100];
structbuilding/*定义建筑工地结构体*/
{charnum[5];
charname[20];
/*工地名*/
charcity[20];
/*城市名*/
}build[100];
structpeijian/*定义配件结构体*/
/*配件名*/
charcolor[20];
/*颜色*/
intweight;
/*重量*/
chararea[20];
/*产地*/
}pj[100];
structs