资源描述
c语言仓库货物管理系统概述
27
2020年5月29日
文档仅供参考
软件学院
课程设计报告
设计名称: C语言课程设计
选题名称 仓库货物管理系统
姓 名: 李明慧
学 号:
专业班级: 云计算1班
系 (院): 软件学院
设计时间: .12.29~ .12.31
设计地点: 实验室 15#610
1.课程设计目的
(1) 巩固和加深学生对C语言的基本知识的理解和掌握;
(2) 掌握C语言编程和程序调试的基本技能;
(3) 利用C语言进行简单软件设计的基本思路和方法;
(4) 提高运用C语言解决实际问题的能力;
(5) 掌握书写程序设计说明文档的能力。
2.课程设计任务与要求:
任务
设计题目从任务书所列选题表中选取,每人1题。
要求:
1、在处理每个题目时,要求从分析题目的需求入手,进行合理的模块设计,定义正确函数和自定义数据类型(如结构体类型)、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。
2、设计的题目要求达到一定工作量(200行以上代码),并具有一定的深度。
3、程序设计语言推荐使用C,程序书写规范,源程序需加必要的注释而且缩进一致。
4、每位同学需提交可独立运行的程序;
5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
3.课程设计说明书
一 需求分析
现阶段快速的社会发展要求高速的完成任何事情。在各个市场,特别在超市,管理员对货物的高效管理显得尤为重要。不但客户希望快速,准确的查询到购买的货物信息,管理员也希望能方便的管理货物,给客户提供满意的服务。因此,本程序就能够完成统计并管理货物信息的任务。实现了统计每个货物的信息,然后能够轻松地经过对货物编号的排序快速的去找到想要查询的货物,然后就能够实现对货物的修改、删除、添加等功能。
本程序的宗旨在于提高管理者的工作效率,方便管理者及客户进行查询,实现精确地管理货物目的。
二 系统设计
该程序设计主要运用了c语言的基本知识,经过调用各个函数实现整个完整的系统功能。该仓库管理系统主要实现了管理员和用户两种不同身份的功能,以下就是程序实现的主要功能:
管理员的功能: 用户的功能:
0:显示菜单 1:读取信息
1:录入信息 2:查询信息
2:查询信息 3:退出系统
3:修改信息
4:添加信息
5:删除信息
6:正向排序
7:输出信息
8:保存信息
9:退出系统
10:读取信息
有功能模块图和流程图
功能模块图:
仓库货物管理系统
管理员
用户
输入密码
退出系统
否
查询信息
读取信息
是否正确?
是
读取信息
退出系统
保存信息
输出信息
正向排序
删除信息
添加信息
修改信息
查询信息
录入信息
显示菜单
开 始
流程图:
读取信息
是否是管理员?
否
输入密码
查询信息
是
密码是否正确?
是
菜单选择
查询信 息
添加信息
删除信息
修改信息
录入信息
正向排序
输入编号
选择添加方式
输入编号
输入编号
输入信息
输出信息
排序完毕
输入添加内容
查询完毕
删除完毕
选择修改内容
输入完毕
添加完毕
输入修改信息
修改完毕
保 存 信 息
读 取 信 息
退 出 系 统
结 束
三 详细设计
1、首先写入头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#define M sizeof(struct goods)
2、定义一个结构体存储货物的信息
struct goods
{
int num;
char name[20];
float price;
int amount;
struct goods *next;
};
3、 输入货物信息函数
struct goods *create()
{
int i;
struct goods *head,*p,*q;
p=q=head=NULL;
printf("请输入货物的编号 名称 价格 数量\n");
for(i=1;;i++)
{
p=(struct goods *)malloc(sizeof(struct goods));
scanf("%d %s %f %d",&p->num,p->name,&p->price,&p->amount);
if(i==1)
head=p;
else
q->next=p;
q=p;
if(p->num==0)
{
break;
}
}
q->next=NULL;
return head;
}
4、查找货物信息函数
void find(struct goods *head,int num)
{
struct goods *p1;
p1=head;
int i=0;
while(p1!=NULL)
{
if(p1->num==num)
{
i=1;
printf("%d %s %.2f %d\n",p1->num,p1->name,p1->price,p1->amount);
printf("查找货物编号成功");
}
p1=p1->next;
}
if(i==0)
printf("没有查到货物编号\n");
}
5、修改信息函数
void change(struct goods *head,int num)
{
struct goods *p2;
p2=head;
int j;
int i=0;
while(p2!=NULL)
{
if(p2->num==num)
{
i=1;
printf("你想修改货物的1.编号 2.名称 3.价格 4.数量 5.全部修改?\n");
scanf("%d",&j);
switch(j)
{
case 1:printf("请输入修改的货物的编号:");scanf("%d",&p2->num);printf("修改货物信息成功\n");break;
case 2:printf("请输入修改的货物的名称:");scanf("%s",p2->name);printf("修改货物信息成功\n");break;
case 3:printf("请输入修改的货物的价格:");scanf("%f",&p2->price);printf("修改货物信息成功\n");break;
case 4:printf("请输入修改的货物的数量:");scanf("%d",&p2->amount);printf("修改货物信息成功\n");break;
case 5:printf("请输入修改的货物的编号 名称 价格 数量:");scanf("%d %s %f %d",&p2->num,p2->name,&p2->price,&p2->amount);printf("修改货物信息成功\n");break;
default :printf("error!\n");break;
}
}
p2=p2->next;
}
if(i==0)
printf("没有找到要修改的货物编号\n");
}
6、(1)添加货物信息函数--------头插法
struct goods *add1(struct goods *head)
{
struct goods *p3,*pm;
int i=0;
pm=head;
p3=(struct goods *)malloc(sizeof(struct goods));
printf("请添加货物的编号 名称 价格 数量\n");
scanf("%d %s %f %d",&p3->num,p3->name,&p3->price,&p3->amount);
while(pm!=NULL)
{
while(pm->num==p3->num)
{
printf("已有此货物编号\n");
scanf("%d %s %f %d",&p3->num,p3->name,&p3->price,&p3->amount);
pm=head;
}
pm=pm->next;
}
p3->next=head;
head=p3;
return head;
printf("添加信息成功\n");
}
(2)添加货物信息函数--------非头插法
struct goods *add2(struct goods *head,int num)
{
struct goods *p4,*p5;
p5=head;
p4=(struct goods *)malloc(sizeof(struct goods));
printf("请添加货物的编号 名称 价格 数量\n");
scanf("%d %s %f %d",&p4->num,p4->name,&p4->price,&p4->amount);
while(p5!=NULL)
{
while(p5->num==p4->num)
{
printf("已有此货物编号\n");
scanf("%d %s %f %d",&p4->num,p4->name,&p4->price,&p4->amount);
p5=head;
}
if(p5->num!=p4->num)
{
p5=p5->next;
}
}
p5=head;
while(p5!=NULL)
{
if(p5->num==num)
{
p4->next=p5->next;
p5->next=p4;
}
p5=p5->next;
}
return head;
printf("添加信息成功\n");
}
7、删除货物信息函数
struct goods *del(struct goods *head,int num)
{
struct goods *p3,*p4;
p3=p4=head;
int i=0;
while(p3->next!=NULL)
{
p4=p3;
p3=p3->next;
if(p3->num==num)
{
i=1;
p4->next=p3->next;
free(p3);
printf("删除货物信息成功\n");
}
}
if(i==0)
printf("没有找到要删除的货物\n");
return head;
}
8、 正向排序函数
struct goods *sort(struct goods *head)
{
struct goods *p,*q,*a,*b,*newhead;
newhead=NULL;
int max;
while(head!=NULL)
{
p=head;
q=head->next;
a=head;
b=NULL;
max=p->num;
while(q!=NULL)
{
if(q->num>max)
{
max=q->num;
a=q;
b=p;
}
p=p->next;
q=q->next;
}
if(a!=head)
{
b->next=a->next;
}
else
{
head=head->next;
}
if(newhead==NULL)
{
newhead=a;
a->next=NULL;
}
else
{
a->next=newhead;
newhead=a;
}
}
return newhead;
}
9、输出信息函数
void print(struct goods *head)
{
struct goods *pt;
pt=head;
while(pt!=NULL)
{
printf("%d %s %.2f %d\n",pt->num,pt->name,pt->price,pt->amount);
pt=pt->next;
}
}
10、保存货物信息函数
void save(struct goods *head)
{
FILE *fp;
struct goods *pm;
pm=head;
if((fp=fopen("aaa.dat","w"))==NULL)
{
printf("cannot have this file\n");
exit(0);
}
while(pm!=NULL)
{
fwrite(pm,sizeof(struct goods),1,fp);
pm=pm->next;
}
fclose(fp);
printf("保存信息成功\n");
}
11、读取货物信息函数
struct goods * save_()
{
int i;
struct goods *head,*p,*q,*p1;
FILE *fp;
fp=fopen("aaa.dat","r");
if(fp==NULL)
{
printf("cannot have this file\n");
exit(0);
}
for(i=1;;i++)
{
p=(struct goods *)malloc(sizeof(struct goods));
fread(p,M,1,fp);
if(i==1)
head=p;
else
q->next=p;
q=p;
if(p->next==0)
{
break;
}
}
q->next=NULL;
p1=head;
while(p1!=NULL)
{
printf("%d %s %.2f %d\n",p1->num,p1->name,p1->price,p1->amount);
p1=p1->next;
}
return head;
fclose(fp);
}
12、释放内存函数
void free_(struct goods *head)
{
struct goods *p5;
while(head!=NULL)
{
p5=head;
free(p5);
head=head->next;
}
printf("释放内存成功\n");
}
13、管理员界面
void menu1()
{
struct goods *head;
int k,num,n,m,j,i,z=3;
char ch[7];
printf("请输入密码:");
scanf("%s",ch);
while(1)
{
if(strcmp(ch,password)==0)
{
printf("欢迎进入仓库管理系统\n");break;
}
else
{
printf("请再次输入密码:(你还有%d次机会)\n",z-1);
scanf("%s",ch);
z--;
}
if(z==0)
{
printf("退出系统");
exit (0);
}
}
printf("\t\t****************************************\n");
printf("\t\t***********仓库管理系统*****************\n");
printf("\t\t****************************************\n");
printf("\t\t************0.显示菜单******************\n");
printf("\t\t************1.录入信息******************\n");
printf("\t\t************2.查询信息******************\n");
printf("\t\t************3.修改信息******************\n");
printf("\t\t************4.添加信息******************\n");
printf("\t\t************5.删除信息******************\n");
printf("\t\t************6.正向排序******************\n");
printf("\t\t************7.输出信息******************\n");
printf("\t\t************8.保存信息******************\n");
printf("\t\t************9.退出系统******************\n");
printf("\t\t***********10.读取信息******************\n");
printf("\t\t****************************************\n");
while(1)
{
printf("\n");
printf("请输入功能选择键:");
scanf("%d",&k);
printf("\n");
if(k==1)
{
head=create();
printf("创立信息成功请继续操作\n");
printf("\n");
}
if(k==2)
{ printf("请输入要查询的货物编号:");
scanf("%d",&num);
find(head,num);
printf("\n");
}
if(k==3)
{
printf("请输入要修改的货物编号:");
scanf("%d",&n);
change(head,n);
print(head);
printf("\n");
}
if(k==4)
{
printf(">>>>>>>>>>>>>>>>1.头插 2.非头插\n");
scanf("%d",&i);
switch(i)
{
case 1:head=add1(head);print(head);break;
case 2:scanf("%d",&j);add2(head,j);print(head);break;
default :printf("error!");break;
}
}
if(k==5)
{
printf("请输入要删除的货物编号:");
scanf("%d",&m);
del(head,m);
print(head);
printf("\n");
}
if(k==6)
{
printf("请将下列货物编号进行排序\n");
head=sort(head);
print(head);
printf("货物排序成功\n");
}
if(k==7)
{
print(head);
printf("\n");
}
if(k==8)
{
save(head);
printf("\n");
}
if(k==9)
{
free_(head);
exit (0);
}
if(k==10)
{
head=save_();
}
if(k==0)
{
printf("\t\t****************************************\n");
printf("\t\t***********仓库管理系统*****************\n");
printf("\t\t****************************************\n");
printf("\t\t************0.显示菜单******************\n");
printf("\t\t************1.录入信息******************\n");
printf("\t\t************2.查询信息******************\n");
printf("\t\t************3.修改信息******************\n");
printf("\t\t************4.添加信息******************\n");
printf("\t\t************5.删除信息******************\n");
printf("\t\t************6.正向排序******************\n");
printf("\t\t************7.输出信息******************\n");
printf("\t\t************8.保存信息******************\n");
printf("\t\t************9.退出系统******************\n");
printf("\t\t***********10.读取信息******************\n");
printf("\t\t****************************************\n");
}
}
}
14、用户界面
void menu2()
{
while(1)
{
struct goods *head;
printf("\t\t******************************************\n");
printf("\t\t************仓库管理系统******************\n");
printf("\t\t***********--------------*****************\n");
printf("\t\t***********--1.读取信息--*****************\n");
printf("\t\t***********--2.查询信息--*****************\n");
printf("\t\t***********--3.退出系统--*****************\n");
printf("\t\t***********--------------*****************\n");
int num,k;
printf("请输入功能选择键:");
scanf("%d",&k);
if(k==1)
{
head=save_();
}
if(k==2)
{
printf("请输入要查询的货物编号:");
scanf("%d",&num);
find(head,num);
printf("\n");
}
if(k==3)
{
exit(0);
}
if(k<=0&&k>3)
{
printf("没有此选项,请重新输入!\n");
}
}
}
15、主界面
int main()
{
int i;
printf("\t\t****************************\n");
printf("\t\t******仓库货物系统**********\n");
printf("\t\t****************************\n");
展开阅读全文