C语言程序设计报告.docx
- 文档编号:12064186
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:40
- 大小:69.76KB
C语言程序设计报告.docx
《C语言程序设计报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告.docx(40页珍藏版)》请在冰豆网上搜索。
C语言程序设计报告
西安邮电大学
(计算机学院)
高级语言课程设计报告
题目:
超市水果信息管理系统
专业名称:
XXXX
班级:
XXXX
学生姓名:
XXXX
学号(8位):
XXXXXXX
指导教师:
XXXX
设计起止时间:
2015年12月9日—2015年12月18日
1.设计目的
熟练掌握C语言课程中学习到的理论知识,通过一个信息管理系统的实现来加强对C语言结构体数组,文件操作的理解,运用C语言的知识解决实际问题。
2.设计内容
通过C语言实现一个水果信息管理系统。
每一种水果都有对应的编号,名称,保质期(天),库存量(kg)。
系统功能包括:
1.欢迎界面,包括用户名,密码。
2.主界面,有各个模块的选择,如信息录入,信息显示,信息查找,信息排序,信息插入,信息修改,信息删除以及退出系统。
可以实现不同的功能。
三.概要设计
1.功能模块图
编号与名称是否匹配
1.按库存量排序
2.按编号排序
2.按编号查找
1.按名称查找
3.查找水果信息
2.显示水果信息
4.排序水果信息
7.删除水果信息
5.插入水果信息
6.修改水果信息
1.录入水果信息
0.退出系统
根据菜单输入的值选择程序
菜单
登录
开始
成功
失败
NY
继续操作
Y
退出系统
10
2.各个模块详细的功能描述
(1).登陆模块
输入用户名和密码,若用户名和密码匹配,则进入主菜单中,若不匹配,
继续输入。
(2).录入模块
录入水果信息,包括水果编号,水果名称,保质期(天),库存量(kg)。
并输出你
要录入的水果信息。
若继续录入选择1,结束录入并返回主菜单选择0。
(3).显示模块
将此时文件所保存的水果信息全部显示,并显示共有多少种水果。
这里有一个统计
文件行数的函数,在显示模块中调用。
(4).查找模块
分为按水果名称查找和按水果编号查找。
并显示所查找的水果信息。
(5).排序模块
分为按水果库存量排序和按水果编号排序,并显示排序所得结果。
(6).插入模块
输入要插入的水果的信息,并显示在屏幕上,确认是否插入。
(7).修改模块
输入要修改的水果的编号,并输入要修改的水果的名称,判断其是否匹配,若匹配,
则显示其完整信息,并选择修改哪一项,输入要修改的项目的编号,修改成功后,
写入文件;若不匹配,则显示“sorry,没有这个水果的数据”。
(8).删除模块
输入要删除的水果的编号,并输入要删除的水果的名称,判断其是否匹配,若匹配,
则显示其完整信息,并选择是否删除,若删除,则删除成功后,写入文件;若不匹
配,则显示“sorry,没有这个水果的数据”。
四.详细设计
1.功能函数的调用关系图
(1).各功能函数
voidmenu();//主菜单
voidwelcome();//登录界面
voidinput();//录入
intline_number(FILE*a);//统计文件行数
voidoutput_all();//显示全部数据
voidsearch();//查找
voidsort();//排序
voidwrite_file(structdrug*p,intn);//重新将数据写入文件
structdrugimport();//水果信息
voidinsert();//插入
voidalter();//修改
voiddelect();//删除
(2).功能函数的调用关系
Welcome()(递归调用)
Menu()
import()
Input()
(递归调用)
Output_all()line_number(FILE*a)
Main()Search()line_number(FILE*a)
write_file(structdrug*p,intn)
Insert()line_number(FILE*a)
write_file(structdrug*p,intn)
alter()
line_number(FILE*a)
line_number(FILE*a)
Sort()
write_file(structdrug*p,intn)
Delect()line_number(FILE*a)
write_file(structdrug*p,intn)
开始
2.各功能函数的数据流程图
(1).登陆
定义用户名数组charname[10],定义密码数组charcode[10],定义变量i。
输入用户名与密码
用户名与密码是
否匹配
NY
进入主菜单
开始
(2).录入
定义一个结构体类型的水果,定义一个文件,定义一个变量f
调用import()函数
实现录入水果信息,并把水果信息存在文件中
继续录入
10
返回主菜单
(3)显示
开始
定义一个文件,定义一个结构体类型的指针变量,定义变量n,i和choice
打开文件,并调用line_number(FILE*a)函数
从文件中读取存入的水果信息,并打印在屏幕上
输入1
YN
继续输入,为1止
返回主菜单
(4).查找
开始
定义一个文件,定义变量n,i,j,choose,choice及num.定义一个结构体类型的指针变量,定义charname[10]
打开文件,并调用line_number(FILE*a)函数
从文件中读取存入的水果信息
按水果名
称查找还是按水果
编号查找
按水果名称查找
12
按水果编号查找
输入1
YN
继续输入,为1止
返回主菜单
(5)排序
开始
定义一个文件,定义变量n,i,j及choice。
定义结构体数组类型的指针变量和普通变量
打开文件,并调用line_number(FILE*a)函数
从文件中读取存入的水果信息
按水果库存量排序
或按水果编号排序
12
按水果编号排序
按水果库存量排序
是否保
存到文件中
12
不保存
保存
输入1
继续输入,为1止
返回主菜单
(6).插入
开始
定义一个文件,定义变量n,i,j,choose,choice及num.定义一个结构体类型的指针变量
打开文件,并调用line_number(FILE*a)函数
输入要插入的水果信息
通过比较得到正确的插入位置,并插入
是否确认其插入
输入错误,请重新输入
写入文件中
12
(7)修改
开始
定义一个文件,定义变量n,i,j,choose,choice及num.定义一个结构体类型的指针变量,定义charname[10]
打开文件,并调用line_number(FILE*a)函数
从文件中读取存入的水果信息
输入水果编号,输入水果名称
判断编号与名
称是否匹配
输入错误,请重新输入
显示水果信息
YN
选择要修改的项目,并输入其编号
已正确修改,并保存在文件中
(8)删除
开始
定义一个文件,定义变量n,i,j,k,r,choose,choice及num.定义一个结构体类型的指针变量,定义charname[10]
打开文件,并调用line_number(FILE*a)函数
从文件中读取存入的水果信息
输入水果编号,输入水果名称
判断编号与名
称是否匹配
显示水果信息
YN
输入错误,请重新输入
是否删除
已正确删除,并保存于文件中
请输入1,继续操作
YN
3.重点设计及编码
intline_number(FILE*a)//统计文件行数
{
intn;
charch;
n=0;
while((ch=fgetc(a))!
=EOF)
{
if(ch=='\n')
n++;
}
rewind(a);//重新定位文件指向文件开头
returnn;
}
voidwrite_file(structdrug*p,intn)//重新将数据写入文件
{
FILE*fp;
inti;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
for(i=0;i fprintf(fp,"%d\t%s\t%d\t%d\n",p[i].num,p[i].name,p[i].save_day,p[i].inv); printf("写入文件成功\n"); fclose(fp); } //删除信息模块 voiddelect() { FILE*fp; intn,i,j,k=0,r; intchoose,choice; intnum; intflag=0; structdrug*p; charname[10]; system("cls"); if((fp=fopen("data.txt","r"))==NULL) { printf("打开文件失败\n"); exit(0); } n=line_number(fp); p=(structdrug*)malloc(n*(sizeof(structdrug))); for(i=0;i { if(fscanf(fp,"%d%s%d%d\n",&p[i].num,p[i].name,&p[i].save_day,&p[i].inv)== EOF) printf("error"); } fclose(fp); printf("\n\n\t请输入水果编号: "); scanf("%d",&num); printf("\n\t请输入水果名称: "); scanf("%s",&name); for(j=0;j { if((num==p[j].num)&&(strcmp(name,p[j].name)==0)) { printf("\n\n\t水果编号\t水果名称\t保质期\t\t库存量\n\n"); printf("\t%d\t\t%s\t\t%d\t\t%d\n\n",p[j].num,p[j].name,p[j].save_day,p[j].inv); printf("确认删除: 是 (1),否(0): "); scanf("%d",&choose); flag=1; if(choose==1) { for(r=j;r p[r]=p[r+1]; k++; printf("\n\n已正确删除\n"); write_file(p,n-k); } } } free(p); if(flag==0) printf("\n\tSORRY! ! 没有这个水果的数据\n"); printf("\n\n\n请输入1,继续操作: "); scanf("%d",&choice); while(choice! =1) { printf("\n输入错误,请重新输入: "); scanf("%d",&choice); } } 五.测试数据及运行结果 1、正常测试数据及运行结果 2、异常测试数据及运行结果 六.调试情况,设计技巧及体会 1、改进方案 刚开始编写的代码功能简单,不太人性化,没有考虑全面,在不断深入 了解后,实现其可能的诸多情况。 如,对于水果的信息排序问题,不但 可以用库存量排,还可以用水果编号进行排序,对于水果的修改和删除 在输入其编号和名称匹配的情况下才可以进行下一步操作。 这些都是考 虑到了现实生活中的可能出现的情况。 2、体会 在逐渐完善函数模块的过程中,不断地考虑可能出现的情况,希望程序 可以趋于完善,更加合适于社会上的需求,而不是单纯的C语言代码, 自己在做这个系统时,遇到很多问题,比如文件的读取与写入,TXT文 件中出现乱码,程序运行的不理想等等诸多问题。 但在询求身边同学的 帮助及网上查资料后,对问题有了很好的解决,也使我对C语言的结构 体数组以及文件的操作有了深入的了解。 通过实践的学习,我认识到学好计 算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机 方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己 便好地学好计算机。 同时我们随时都要培养自己的动手能力,只有这样,才能更好 的适应这个日新月异的飞速发展的社会。 7.参考文献 附录源代码 #include #include #include #include voidmenu();//主菜单 voidwelcome();//登录界面 voidinput();//录入 intline_number(FILE*a);//统计文件行数 voidoutput_all();//显示全部数据 voidsearch();//查找 voidsort();//排序 voidwrite_file(structdrug*p,intn);//重新将数据写入文件 structdrugimport();//水果信息 voidinsert();//插入 voidalter();//修改 voiddelect();//删除 intflag1=1; structdrug { intnum;//水果编号 charname[10];//水果名称 intsave_day;//水果有效期 intinv;//水果库存量 }; //主函数 intmain() { intchoice; welcome(); while(flag1) { system("cls"); menu(); scanf("%d",&choice); if(choice<0||choice>7) { printf("输入错误,请重新选择\n"); menu(); scanf("%d",&choice); } switch(choice) { case1: input();break;//输入 case2: output_all();break;//显示 case3: search();break;//查找 case4: sort();break;//排序 case5: insert();break;//插入 case6: alter();break;//修改 case7: delect();break;//删除 case0: flag1=0;break;//退出 } } return0; } //登陆模块 voidwelcome() { inti; charname[10]; charcode[10]; printf("\n\n\n"); printf(" ( .@.@ )\n"); printf("+-------oOOo-----(_)-----oOOo---------+\n\n"); printf("欢迎使用^.^\n"); printf("\n"); printf("\n\n\n\n\n\n用户名: "); gets(name); printf("\n\n\n密码: "); for(i=0;i<6;i++) { code[i]=getch(); printf("*"); } code[6]='\0'; if((strcmp(name,"123")! =0)||(strcmp(code,"111111")! =0)) { system("cls"); printf("\nsorry! T.T输入错误! 请重新输入! \n"); welcome(); } } //主菜单 voidmenu() { printf("******************************************************************************\n"); printf("*******水果店水果管理系统*******\n"); printf("**\n"); printf("**\n"); printf("****1.录入水果信息*\n"); printf("**\n"); printf("****2.显示水果信息*\n"); printf("**\n"); printf("****3.查找水果信息*\n"); printf("**\n"); printf("****4.排序水果信息*\n"); printf("**\n"); printf("****5.插入水果信息*\n"); printf("**\n"); printf("****6.修改水果信息*\n"); printf("**\n"); printf("****7.删除水果信息*\n"); printf("**\n"); printf("****0.退出系统*\n"); printf("**\n"); printf("*请选择(0-7)*\n"); printf("**\n\n"); printf("\t(=^^=)请输入你的选择: \t"); } //录入模块 voidinput() { FILE*fp; structdruga; intf; if((fp=fopen("data.txt","a+"))==NULL) printf("error"); a=import(); printf("\n继续录入1,结束录入0: "); scanf("%d",&f); while(f! =1&&f! =0) { printf("\n输入错误,请重新输入: "); scanf("%d",&f); } if(f==1)input(); fprintf(fp,"%d\t%s\t%d\t%d\n",a.num,a.name,a.save_day,a.inv); fclose(fp); } structdrugimport()//水果信息 { structdruga; system("cls"); printf("\n\n\n->水果编号: "); scanf("%d",&a.num); printf("\n->水果名称: "); scanf("%s",a.name); printf("\n->有效期(天): "); scanf("%d",&a.save_day); printf("\n->库存量(kg): ") scanf("%d",&a.inv); printf("\n\n您输入的水果数据为: \n\n"); printf("水果编号水果名称保质期库存量\n\n"); printf("%d%s%d%d\n\n",a.num,a.name,a.save_day,a.inv); returna; } intline_number(FILE*a)//统计文件行数 { intn; charch; n=0; while((ch=fgetc(a))! =EOF) { if(ch=='\n') n++; } rewind(a);//重新定位文件指向文件开头 returnn; } //显示信息模块 voidoutput_all() { FILE*fp; intn; inti; structdrug*p; intchoice; system("cls"); if((fp=fopen("data.txt","r"))==NULL) { printf("打开文件失败\n"); exit(0); } n=line_number(fp); printf("\n*******共计%d种水果***********\n\n",n); p=(structdrug*)malloc(n*(sizeof(structdrug))); printf("\t水果编号\t水果名称\t保质期\t\t库存量\n\n\n"); for(i=0;i { if(fscanf(fp,"%d%s%d%d\n",&p[i].num,p[i].name,&p[i].save_day,&p[i].inv)==EOF) printf("error"); printf("\t%d\t\t%s\t\t%d\t\t%d\n\n",p[i].num,p[i].name,p[i].save_day,p[i].inv); } printf("\n"); fclose(fp); free(p); printf("\n\n\n请输入1,继续操作: "); scanf("%d",&choice); while(choice! =1) { printf("\n输入错误,请重新输入: "); scanf("%d",&choice); } } //查询信息模块 voidsearch() { FILE*fp; intn; inti,j; intchoose,choice; intnum; intflag=0; structdrug*p; charname[10]; system("cls"); if((fp=fopen("data.txt","r"))==NULL) { printf("打开文件失败\n"); exit(0); } n=l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 报告