c语言程序设计实验报告.docx
- 文档编号:8889761
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:67
- 大小:410.13KB
c语言程序设计实验报告.docx
《c语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《c语言程序设计实验报告.docx(67页珍藏版)》请在冰豆网上搜索。
c语言程序设计实验报告
西安郵電學院
C语言课程设计报告
题目:
超市管理系统
院系名称:
计算机学院
专业名称:
网络工程
班级:
网络1001班
学生姓名:
李婷婷
学号(8位):
04102016
指导教师:
张红英
设计起止时间:
2011年6月13日~2011年6月22日
一.设计目的
1.掌握带头节点的链表的工作原理和处理方法。
2.会使用malloc、free等函数对链表进行创建、增加、删除、查询、统计等操作。
3.加深理解模块化的编程思想,将一个程序划分成不同的函数来编写,掌握函数之间有效的调用关系。
4.会使用C语言对文件进行读取、修改等操作,掌握文件的读、写操作。
5.了解商品管理中所需处理的信息以及县官的处理方法
6.掌握简单的加密方法,同时对密码加密。
二.设计内容
本程序主要分为六个模块:
主模块、信息输出修改模块、新建信息模块、排序模块、统计模块、打印模块。
1)主模块:
通过调用各分模块实现功能;
2)信息输出修改模块:
输出显示文件中商品信息内容,添加商品信息,删除商品信息,修改商品信息;
3)新建商品信息模块:
建立一个新结构体,为链表存信息用,并且将信息保存在指定的文件中;
4)排序模块:
把文件中顺序零乱的商品信息按单价的大小从高到低进行排序,放到链表里存储;
5)打印模块:
将商品信息按每类平均价格排序(从高到低)按顺序打印出来;
6)统计模块:
统计商品信息。
三.概要设计
1.功能模块图;
2.各个模块详细的功能描述。
1重新输入管理员信息1.升序输出
2.输出管理员基本信息
2.降序输出
3.查询管理员基本信息1.按姓名查询
管理员信息4.删除管理员信2.按管理号
5.统计管理员信息1.增加管理员
6.修改管理员信息2.修改管理员
7.读取链表到文件
超市管理系统1.输入/输出商品信息
1.升序输出
2.商品排序
2.降序输出
3.添加商品信息1.按编号查询
商品信息4.查询商品信息2.按名称查查询
5.修改商品信息3.按生产单位查询
6.删除商品信息1.按种类统计
7.统计商品信息2.按生产日期统计
8.读取文件信息3.按价格统计
四.详细设计
1.功能函数的调用关系图
2.各功能函数的数据流程图
修改商品信息流程图
查询商品信息流程图
对商品信息排序流程图
输入商品信息流程图
输出商品信息流程图
打开文件流程图
统计商品信息流程图
删除商品信息流程图
添加商品信息流程图
3.重点设计及编码
商品信息的你排序
//降序排序
structgood*jiangxu(structgood*h)
{
structgood*p1=h->next,*p2,*p;
while(p1->next!
=NULL)
{
p=p1;
p2=p1->next;
while(p2!
=NULL)
{
if(strcmp(p->num,p2->num)<0)
p=p2;
p2=p2->next;
}
if(p!
=p1)
{
exchange(p,p1);
}
p1=p1->next;
}
returnh;
}
//升序排序
structgood*shengxu(structgood*h)
{
structgood*p1=h->next,*p2,*p;
while(p1->next!
=NULL)
{
p=p1;
p2=p1->next;
while(p2!
=NULL)
{
if(strcmp(p->num,p2->num)>0)
p=p2;
p2=p2->next;
}
if(p!
=p1)
{
exchange(p,p1);
}
p1=p1->next;
}
returnh;
}
voidexchange(structgood*p,structgood*p1)
{
charcdata[50];
strcpy(cdata,p1->num);strcpy(p1->num,p->num);
strcpy(p->num,cdata);
strcpy(cdata,p1->name);strcpy(p1->name,p->name);
strcpy(p->name,cdata);
strcpy(cdata,p1->kind);strcpy(p1->kind,p->kind);
strcpy(p->kind,cdata);
strcpy(cdata,p1->price);strcpy(p1->price,p->price);
strcpy(p->price,cdata);
strcpy(cdata,p1->unit);strcpy(p1->unit,p->unit);
strcpy(p->unit,cdata);
strcpy(cdata,p1->quantity);strcpy(p1->quantity,p->quantity);
strcpy(p->quantity,cdata);
strcpy(cdata,p1->pro_time);strcpy(p1->pro_time,p->pro_time);
strcpy(p->pro_time,cdata);
}
统计商品信息
//按种类统计
tongji1(structgood*p)
{
intflag=0,i=0;
charspkind[20];
printf("请输入种类:
");
scanf("%s",spkind);
while(p->next!
=NULL)
{
p=p->next;
if(strcmp(p->kind,spkind)==0)
{
i++;
flag=1;
}
}
if(flag==0)
{
printf("nofind!
");
}
if(flag==1)
{
printf("这个种类的商品有%d个.\n",i);
}
}
删除商品信息
//删除商品信息函数
intshanchu(structgood*p0)
{
charnum[10];
structgood*p;
p=p0->next;
printf("请输入删除的商品号:
");
scanf("%d",&num);
while(p!
=NULL)
{
if(strcmp(p->num,num)==0)
{
p0->next=p->next;
free(p);
return1;
}
printf("删除后的商品信息:
\n");
printf("商品编号:
%s\n",p->num);
printf("商品名称:
%s\n",p->name);
printf("商品类型:
%s\n",p->kind);
printf("商品价格:
%s\n",p->price);
printf("商品生产单位:
%s\n",p->unit);
printf("商品数目:
%s\n",p->quantity);
printf("商品生产日期:
%s\n",p->pro_time);
printf("********************\n");
p0=p;
p=p->next;
}
printf("删除失败!
");
return0;
}
五.测试数据及运行结果
1.正常测试数据和运行结果
要求提供3组正常测试数据和运行结果
2.异常测试数据及运行结果
六.调试情况,设计技巧及体会
1.改进方案
对于密码的设计以及加密把握不太准确,调试时经常会出现密码不匹配的情况。
对于排序函数的设计采用交换指针内容而不会采用交换节点来实现。
对文件的读写还需进一步的改进。
2.体会
在调试的过程中多使用单目跟踪的方法,这样可以更快更方便的找到自己的错误。
在编程的过程中采用分模块编写,可以是思维更加清晰,
七.参考文献
《C语言程序设计案例实践》,《C语言程序设计》教材
八.附录:
源代码(电子版)
/*超市管理系统*/
#include
#include
#include
#include
#defineNsizeof(structgood)
voidexchange();
structgood/*商品结构体类型*/
{
charnum[10];
charname[20];
charkind[40];
charprice[10];
charunit[10];
charquantity[10];
charpro_time[10];
structgood*next;
};/*定义结构体指针类型*/
typedefstructmanage//管理人员信息结构体
{
charname[20];
charnumb[15];
charkey[20];
structmanage*next;
}manage;
//管理人员基本信息的创建函数
structmanage*creat1(void)
{
structmanage*p1,*p2,*l;
inti,m,j,k=0;
charkey[30];
printf("\n\n");
printf("*************************************************\n\n");
printf("请输入要存入管理人员的人数:
");
scanf("%d",&m);
l=p2=(structmanage*)malloc(sizeof(structmanage));
for(i=0;i { p1=(structmanage*)malloc(sizeof(structmanage)); printf("\n\n请输入%d第个管理人员的信息: \n",i+1); printf("\n请输入管理号: "); scanf("%s",p1->numb); printf("\n请输入姓名: "); scanf("%s",p1->name); printf("\n请输入密码: "); for(j=0;j<20;j++) { key[j]=getch(); if(key[j]=='\015') break; elseif(key[j]=='\b') { printf("\b\b"); key[j]='\0'; j=j-2; } else printf("*"); } key[j]='\0'; strcpy(p1->key,key); p2->next=p1; p2=p1; } p2->next=NULL; printf("\n\n"); printf("*************************************************\n\n"); returnl; } //输出管理员信息 voidprint1(structmanage*h) { intx,i; printf("\n\n\n"); printf("*********************公寓楼管理员信息********************\n\n"); h=h->next; while(h! =NULL) { printf("管理号: %-8s姓名: %-8s密码: ",h->numb,h->name); x=strlen(h->key); for(i=0;i printf("*"); h=h->next; printf("\n\n"); } printf("****************************************************\n\n"); } structmanage*sort1(structmanage*p) { structmanage*r,*s; r=p->next; p->next=NULL; while(r! =NULL) { s=r->next; r->next=p->next; p->next=r; r=s; } free(r); free(s); returnp; } //用姓名查找管理人员信息函数 lookname(structmanage*h) { intleaf=0,x,i; charname[15]; printf("\n\n"); printf("*************************************************\n\n"); printf("请输入要查找的管理员姓名: \n"); scanf("%s",name); while(h->next! =NULL) { h=h->next; if(strcmp(h->name,name)==0) { printf("管理号: %-8s姓名: %-8s密码: ",h->numb,h->name); x=strlen(h->key); for(i=0;i printf("*"); leaf=1; } } if(leaf==0) printf("未找到要查找的管理员! \n"); printf("\n\n"); printf("*************************************************\n\n"); } //用管理号查找管理人员信息函数 looknumb(structmanage*h) { intleaf=0,x,i; charnumb[15]; printf("\n\n"); printf("*************************************************\n\n"); printf("请输入要查找的管理员的管理号: \n"); scanf("%s",numb); while(h->next! =NULL) { h=h->next; if(strcmp(h->numb,numb)==0) { printf("管理号: %-8s姓名: %-8s密码: ",h->numb,h->name); x=strlen(h->key); for(i=0;i printf("*"); leaf=1; } } if(leaf==0) printf("未找到要查找的管理员! \n"); printf("\n\n"); printf("*************************************************\n\n"); } //删除管理员信息函数 dele(structmanage*h) { charname[15]; intleaf=0; structmanage*j; j=h->next; printf("\n\n"); printf("*************************************************\n\n"); printf("请输入要删除的管理员姓名: \n"); scanf("%s",name); while(j! =NULL) { if(strcmp(j->name,name)==0) { h->next=j->next; free(j); printf("删除成功! \n"); leaf=1; break; } h=j; j=h->next; } if(leaf==0) printf("未找到要删除的管理员! ! ! \n"); printf("\n\n"); printf("*************************************************\n\n"); } //增加管理人员信息函数 add(structmanage*h) { structmanage*p; charkey[30]; inti; p=(structmanage*)malloc(sizeof(structmanage)); printf("\n\n"); printf("*************************************************\n\n"); printf("请输入要增加的管理员信息: \n"); printf("请输入姓名: "); scanf("%s",p->name); printf("请输入管理号: "); scanf("%s",p->numb); printf("请输入密码: "); for(i=0;i<20;i++) { key[i]=getch(); if(key[i]=='\015')break; elseif(key[i]=='\b') {printf("\b\b"); key[i]='\0'; i=i-2; } else printf("*"); } key[i]='\0'; strcpy(p->key,key); printf("\n\n"); printf("*************************************************\n\n"); while(h->next! =NULL&&strcmp(h->next->name,p->name)<0) h=h->next; p->next=h->next; h->next=p; printf("itisok! \n\n"); system("pause"); } //修改管理人员信息函数 revise1(structmanage*h) { structmanage*d; intl=0,choice4,i,j=0,k=0,m=0,leaf=0; charname[20],name1[20],numb[15],key[10],key1[10],identity[20]; d=h->next; printf("\n\n"); printf("*************************************************\n\n"); strcpy(identity,"guanliyuan"); printf("请输入要修改人的姓名: \n"); scanf("%s",name); while(d! =NULL) { d=d->next; if(strcmp(d->name,name)==0) { l=1; while(m! =3) { m++; printf("请输入你要修改人原来的密码: \n\n"); for(i=0;i<20;i++) { key[i]=getch(); if(key[i]=='\015') break; elseif(key[i]=='\b') { printf("\b\b"); key[i]='\0'; i=i-2; } else printf("*"); } key[i]='\0'; if(strcmp(d->key,key)==0) { printf("itisok! \n\n"); system("pause"); do { system("cls"); printf("\n\n"); printf("可修改项目为: \n"); printf("*******************************************\n\n"); printf("1: 姓名\n\n"); printf("2: 管理号\n\n"); printf("3: 密码\n\n"); printf("0: 返回.\n\n"); printf("请选择(0-3): \n\n"); printf("*******************************************\n\n"); printf("您的选择是: \n\n"); fflush(stdin); scanf("%d",&choice4); switch(choice4) { case0: break; case1: printf("请输入你修改后的名字: "); scanf("%s",name1); strcpy(d->name,name1); system("pause");break; case2: printf("请输入你修改后的管理号: "); scanf("%s",numb); strcpy(d->numb,numb); system("pause");break; case3: printf("请输入你修改后的新密码: "); for(i=0;i<20;i++) { key[i]=getc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 报告