1、c语言程序设计实验报告西安郵電學院C语言课程设计报告题 目:超市管理系统院系名称:计算机学院专业名称:网络工程班 级:网络1001班学生姓名:李婷婷学号(8位):04102016指导教师:张 红 英设计起止时间:2011年6月13日2011年6月22日 一. 设计目的1.掌握带头节点的链表的工作原理和处理方法。2.会使用malloc、free等函数对链表进行创建、增加、删除、查询、统计等操作。3.加深理解模块化的编程思想,将一个程序划分成不同的函数来编写,掌握函数之间有效的调用关系。4.会使用C语言对文件进行读取、修改等操作,掌握文件的读、写操作。5.了解商品管理中所需处理的信息以及县官的处理
2、方法6.掌握简单的加密方法,同时对密码加密。二. 设计内容本程序主要分为六个模块:主模块、信息输出修改模块、新建信息模块、排序模块、统计模块、打印模块。1) 主模块:通过调用各分模块实现功能;2) 信息输出修改模块:输出显示文件中商品信息内容,添加商品信息,删除商品信息,修改商品信息;3) 新建商品信息模块:建立一个新结构体,为链表存信息用,并且将信息保存在指定的文件中;4) 排序模块:把文件中顺序零乱的商品信息按单价的大小从高到低进行排序,放到链表里存储;5) 打印模块:将商品信息按每类平均价格排序(从高到低)按顺序打印出来;6) 统计模块:统计商品信息。 三概要设计 1功能模块图;2各个模
3、块详细的功能描述。 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
4、各功能函数的数据流程图修改商品信息流程图查询商品信息流程图对商品信息排序流程图输入商品信息流程图输出商品信息流程图打开文件流程图统计商品信息流程图删除商品信息流程图添加商品信息流程图3重点设计及编码商品信息的你排序/降序排序struct good *jiangxu(struct good *h) struct good *p1=h-next,*p2,*p; while(p1-next!=NULL) p=p1; p2=p1-next; while(p2!=NULL) if(strcmp(p-num,p2-num)next; if(p!=p1) exchange(p,p1); p1=p1-next
5、; return h;/升序排序struct good *shengxu(struct good *h) struct good *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; return h;void exchange(struct good *p,struct good *p1) char cdata50; strcpy(cda
6、ta,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
7、-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(struct good *p) int flag=0,i=0; char spkind20; printf(请输入种类:); scanf(%s,spkind); wh
8、ile(p-next!=NULL) p=p-next; if(strcmp(p-kind,spkind)=0) i+; flag=1; if(flag=0) printf(no find!); if(flag=1) printf(这个种类的商品有%d个.n,i); 删除商品信息/删除商品信息函数int shanchu(struct good *p0) char num10; struct good *p; p=p0-next; printf(请输入删除的商品号:); scanf(%d,&num); while(p!=NULL) if(strcmp(p-num,num)=0) p0-next=p
9、-next; free(p); return 1; 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(删除失败!); return 0;五测试数据及运行
10、结果1正常测试数据和运行结果要求提供3组正常测试数据和运行结果2异常测试数据及运行结果六调试情况,设计技巧及体会1改进方案对于密码的设计以及加密把握不太准确,调试时经常会出现密码不匹配的情况。对于排序函数的设计采用交换指针内容而不会采用交换节点来实现。对文件的读写还需进一步的改进。2体会在调试的过程中多使用单目跟踪的方法,这样可以更快更方便的找到自己的错误。在编程的过程中采用分模块编写,可以是思维更加清晰,七参考文献C语言程序设计案例实践,C语言程序设计教材八附录:源代码(电子版)/*超市管理系统*/#include #include #include #include #define N s
11、izeof(struct good)void exchange(); struct good /*商品结构体类型*/ char num10; char name20; char kind40; char price10; char unit10; char quantity10; char pro_time10; struct good *next; /*定义结构体指针类型*/typedef struct manage /管理人员信息结构体 char name20; char numb15; char key20; struct manage *next;manage;/管理人员基本信息的创建
12、函数struct manage *creat1(void) struct manage *p1,*p2,*l; int i,m,j,k=0; char key30; printf(nn); printf( *nn); printf( 请输入要存入管理人员的人数:); scanf(%d,&m); l=p2=(struct manage*)malloc(sizeof(struct manage); for(i=0;inumb); printf(n请输入姓名:); scanf(%s,p1-name); printf(n请输入密码:); for(j=0;jkey,key); p2-next=p1; p
13、2=p1; p2-next=NULL; printf(nn); printf(*nn); return l;/输出管理员信息void print1(struct manage *h) int x,i; printf(nnn); printf(*公寓楼管理员信息*nn); h=h-next; while(h!=NULL) printf(管理号:%-8s姓名:%-8s密码:,h-numb,h-name); x=strlen(h-key); for(i=0;inext; printf(nn); printf(*nn);struct manage *sort1(struct manage *p) st
14、ruct manage *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); return p; /用姓名查找管理人员信息函数lookname(struct manage *h) int leaf=0,x,i; char name15; printf(nn); printf(*nn); printf(请输入要查找的管理员姓名:n); scanf(%s,name); while(h-next!=NULL) h=h-next; if(strcmp(
15、h-name,name)=0) printf(管理号:%-8s姓名:%-8s密码:,h-numb,h-name); x=strlen(h-key); for(i=0;inext!=NULL) h=h-next; if(strcmp(h-numb,numb)=0) printf(管理号:%-8s姓名:%-8s密码:,h-numb,h-name); x=strlen(h-key); for(i=0;inext; printf(nn); printf(*nn); printf(请输入要删除的管理员姓名:n); scanf(%s,name); while(j!=NULL) if(strcmp(j-na
16、me,name)=0) h-next=j-next; free(j); printf(删除成功!n); leaf=1; break; h=j; j=h-next; if(leaf=0) printf(未找到要删除的管理员!n); printf(nn); printf(*nn);/增加管理人员信息函数add(struct manage *h ) struct manage *p; char key30; int i; p=(struct manage*)malloc(sizeof(struct manage); printf(nn); printf(*nn); printf(请输入要增加的管理员
17、信息:n ); printf(请输入姓名:); scanf(%s,p-name); printf(请输入管理号:); scanf(%s,p-numb); printf(请输入密码:); for(i=0;ikey,key); printf(nn); printf(*nn); while(h-next!=NULL&strcmp(h-next-name,p-name)next; p-next=h-next; h-next=p; printf(it is ok!nn); system(pause);/修改管理人员信息函数revise1(struct manage *h ) struct manage
18、*d; int l=0,choice4,i,j=0,k=0,m=0,leaf=0; char name20,name120,numb15,key10,key110,identity20; d=h-next; printf(nn); printf(*nn); 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(请输入你要修改人原来的密码:nn); for(i=
19、0;ikey,key)=0) printf( it is ok!nn); system(pause); do system(cls); printf(nn); printf( 可修改项目为:n); printf(*nn); printf( 1:姓名nn); printf( 2:管理号nn); printf( 3:密码nn); printf( 0:返回.nn); printf( 请选择 (0-3):nn); printf(*nn); printf( 您的选择是:nn); fflush(stdin); scanf(%d,&choice4); switch(choice4) case 0:break; case 1: printf(请输入你修改后的名字:); scanf(%s,name1); strcpy(d-name,name1); system(pause);break; case 2: printf(请输入你修改后的管理号:); scanf(%s,numb); strcpy(d-numb,numb); system(pause);break; case 3: printf(请输入你修改后的新密码:); for(i=0;i20;i+) keyi=getc