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;ifprintf(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;rp[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