C语言程序设计报告.docx

上传人:b****5 文档编号:12064186 上传时间:2023-04-16 格式:DOCX 页数:40 大小:69.76KB
下载 相关 举报
C语言程序设计报告.docx_第1页
第1页 / 共40页
C语言程序设计报告.docx_第2页
第2页 / 共40页
C语言程序设计报告.docx_第3页
第3页 / 共40页
C语言程序设计报告.docx_第4页
第4页 / 共40页
C语言程序设计报告.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

C语言程序设计报告.docx

《C语言程序设计报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告.docx(40页珍藏版)》请在冰豆网上搜索。

C语言程序设计报告.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1