C语言程序设计实验个人物品管理程序_第1页
C语言程序设计实验个人物品管理程序_第2页
C语言程序设计实验个人物品管理程序_第3页
C语言程序设计实验个人物品管理程序_第4页
C语言程序设计实验个人物品管理程序_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 程序设计与算法综合实习I题 目: 个人物品管理程序班 级:学生学号: 学生姓名: 指导老师: 提交时间: 2015.05.16成 绩:评分项目得分功能完整性(40分)界面美观性(10分)设计合理性及创新性(20分)答辩表现(20分)报告撰写质量(10分) 华南农业大学 信息学院个人物品管理程序1. 问题描述1.1问题描述设计一个个人物品管理程序,该程序具有以下功能:(1)用户登录:输入用户名和密码,密码正确才允许登录。 (2)录入个人物品信息; (3)给定物品名或编号,修改该个人物品信息; (4)给定物品名或编号,删除该个人物品信息; (5)根据输入的物品名或编号,显示查找到的相应物品信息;

2、 (6)根据输入的分类,显示该分类的所有物品信息; (7)根据输入的时间,查询过期或3月内将过期的物品信息; (8)统计功能:统计各分类的物品。 (9)新功能:导出个人物品信息至Excel表格。1.2系统功能分析 (1)登录功能:这是一个个人物品管理程序,具有很大的开放性,已经注册的用户可以直接输入密码登陆系统,没有注册的用户可以根据自己的需要注册账户,并输入个人物品信息。 (2)录入个人物品信息:这个系统设置录入的物品信息主要包括物品的名称、编号、价格、分类、生产日期和过期日期。 (3)给定物品名或编号,修改个人物品信息:要修改物品信息时,输入物品的编号或名称查看物品信息,确认无误后可以选择

3、对应的物品信息进行修改。 (4)给定物品名或编号,删除个人物品信息:要删除物品信息时,输入物品的编号或名称查看物品信息,确认无误后可以删除该物品信息。 (5)根据输入的物品名或编号,显示查找到的相应物品信息:输入你想查找的物品名或编号,若找到对应物品信息,则显示;否则提示用户查找的物品不存在,请重新输入想要查找的物品名或编号。 (6)根据输入的分类,显示该分类的所有物品信息:若找到则显示该分类的物品信息,否则提示用户该分类不存在。 (7)根据输入的时间,查询已过期或3个月内将过期的物品信息:将物品的过期时间与输入时间作比较,若过期时间与输入时差小于3个月则输出对应物品信息。 (8)统计功能:统

4、计各分类的物品信息。 (9)导出个人物品信息至Excel表格:每个人都可以将自己的物品信息导出至Excel表格,可以对自己的个人物品信息一目了然。1.3开发平台及工具介绍我这个程序是使用Code:Blocks10.05编写的,它是一个开放源码的全功能的跨平台C/C+集成开发环境,它使用了著名的的图形界面库wxWidgets版。它还提供了许多工程模板,包括控制台应用、DirectX应用和动态链接库等,另外它还支持用户自定义模板;它支持语法彩色醒目显示,支持代码完成,支持工程管理、项目构建、调试;它还具有灵活而强大的配置功能。1. 系统设计2.1系统总体结构设计 (1)运行程序时,一开始我设置了对

5、系统进行操作的选择界面,包括3个功能,一是登录系统,二是创建新账户,三是退出程序。用户可以根据自己的实际情况进行选择,输入对应的操作数从而选择不同的功能。我在这里使用了switch-case语句。当用户选择了登陆系统或创建新账户操作时,程序会要求输入账号(20个字符以内),以及密码(10个字符以内),在输入密码时我使用了getch()函数(在头文件conio.h中)隐藏用户密码信息,当用户登陆成功或创建新用户成功时程序就会进入功能选择界面;如果用户选择退出程序,程序运行停止。 (2)功能选择界面,我提供了九个功能选择,分别是录入个人物品信息、给定物品名或编号,修改该个人物品信息、给定物品名或编

6、号,删除该个人物品信息、根据输入的物品名或编号,显示查找到的相应物品信息、根据输入的分类,显示该分类的所有物品信息、根据输入的时间,查询已过期或3个月内将过期的物品信息、统计功能:统计各分类的物品信息、导出个人物品信息至Excel表格、退出到登陆界面。根据用户输入的操作数,我使用了switch语句实现相应功能。 (3)录入个人物品信息:录入的物品信息包括物品的名称、编号、价格、分类、生产日期和过期日期。我首先将信息录入链表中,之后用自定义的保存函数Save()将信息存入文件中。 (4)给定物品名或编号,删除个人物品信息:先输入要删除的物品名或编号,之后再通过文件指针在文件中找到相应物品信息并输

7、出,用户确定无误后可以自行选择删除与否,若删除再调用Save函数,否则退回到功能选择界面。 (5)给定物品名或编号,修改个人物品信息:与删除个人物品信息一样,根据输入的物品名或编号,通过文件指针找到物品信息并输出,用户可以根据自己的需要选择修改对应的信息,在确认修改后,通过Save函数保存信息,放弃修改则退回功能选择界面。 (6)根据输入的物品名或编号,显示查找到的相应物品的所有信息,这也是通过文件指针实现的查找。 (7)根据输入的分类,显示该分类的所有物品信息:输入想查找的分类,使用一个字符数组记录输入的分类,使用文件指针对文件进行只读操作, 将输入的分类与fgets()读出的分类比较,若相

8、同则输出对应物品所有信息,直到文件指针为空。 (8)根据输入的时间,查询已过期或3个月内将过期的物品信息:按照固定的时间输入格式(如2015年1月1日则写成20150101)输入时间,再与文件中的过期时间比较,通过比较,输出输入时间与过期时间之差小于3个月的物品信息。 (9)统计功能:统计各分类的物品信息,使用文件指针对文件进行读操作,分别记录不同分类的物品个数,之后输出分类信息和对应的物品个数。 (10)导出个人物品信息至Excel表格:创建新的文件指针,将链表里的信息写入名为“goods.xls”的Excel文件里,输出的时候包括跳格符t和换行符n符号,保证输出格式的正确性。 (11)退出

9、到登陆界面,其他用户可以继续使用该系统。2.2数据结构设计我主要定义了用户信息结构user和物品信息结构Goods,还有使用了3个文件,分别用于存放用户信息和物品信息。用户信息结构体struct user char username20; char password8;username是账号,password是密码。物品信息结构体typedef struct wp /定义数据结构char name20; /*名称*/char number6;/*编号*/char price6;/*价格*/char categoty10; /*分类*/char MFG9; /*生产日期*/char EXP9;

10、/*过期时间*/struct wp *next;Goods;2.3系统各个函数及函数之间关系设计 开始 登 陆 系 统2.4界面设计 (1)开始界面 (2)功能选择界面(3)查找物品界面(4)录入新物品(5)删除物品信息界面(6)修改物品信息界面(7)输出物品分类界面(8)查询过期物品界面(9)统计分类信息界面(10)导出物品信息到Excel表格界面3.系统实现登陆模块 登录系统 欢迎使用个人物品管理系统 创建新账户 退出系统选择对应操作,登陆时用户名或密码错误会提示输入账号或密码错误,并退回到本界面;创建新账户成功后会提示创建成功,并退到本界面,只需用刚创建的用户名和密码登陆即可,只有用户和

11、密码都正确,才会提示登陆成功并跳转到功能选择界面。录入个人物品信息 物品名称 物品编号 物品价格 录入物品信息 物品分类 生产日期 过期时间按照提示输入相应的物品信息。输入物品名或编号之后,程序会输入对应物品信息,确认删除后才会删除对应物品信息并保存。 物品名称 物品编号 物品价格 删除物品信息 物品分类 生产日期 过期时间修改物品信息:输入物品名或编号之后,程序会输入对应物品信息,可以选择对应信息进行修改。 列出要修改物品所有信息 修改物品信息 选择对应信息进行修改查找物品信息 输入物品名或编号 查找物品信息 列出对应物品信息 根据输入的分类,显示该分类的所有物品信息 输入物品分类 根据输入

12、分类显示物品信息 列出对应物品信息 根据输入的时间,查询已过期或3个月内将过期的物品信息 输入查询时间 查询过期物品或三个月内过期物品 比较输入的时间和过期时间 输出对应物品信息统计功能:统计各分类的物品信息 用不同变量记录不同分类的物品个数 统计各分类的物品信息 用文件指针对文件进行读写 输出物品分类及对应物品个数 导出个人物品信息至Excel表格 输出物品存储信息项目名称 导出物品信息到Excel表格 1. 系统测试 (1)设计测试用例:登陆账号名称:201430330101 密码:123456名称编号价格(元)分类生产日期过期时间钢笔1100文具2014010120160101笔芯210

13、文具2015010120160101尺子35文具2014010120160101铅笔410文具2015010120160101可乐55饮料2015010120150601雪碧65饮料2015010120151001加多宝75饮料2015020120150801水壶850日常用品2014010120160101书910生活用品2014010120160101手表1150用具2014010120150101物品信息: 录入个人物品信息:名称:水杯 编号:10 价格:50 分类:日常用品 生产日期:20140101 过期时间:20160101删除物品信息:名称:钢笔 编号:01修改个人物品信息:修改

14、编号为11的物品名称为灯查找物品信息:查找编号为10的物品信息根据输入分类输出该分类所有物品:输入文具过期物品查询:输入时间为20160101统计各分类物品个数;导出物品信息到Excel表格;预期结果:全都符合要求。1. 系统运行界面: 登录系统 录入个人物品信息 删除物品信息修改个人物品信息 查找物品信息根据输入分类输出该分类所有物品过期物品查询统计各分类物品个数导出物品信息到Excel表格 (3)运行结果与预期结果相同。1. 总结刚开始设计时毫无头绪,代码也是写得一团糟,感觉自己对上学期的内容好陌生,所以决定还是先把有关内容看一遍。后来我看了课本和上网查了有关资料,然后再仔细地看了一遍题目

15、要求:信息要求必须存在文件里面,而且数据操作要用链表,所以我将程序设计为开始时读取文件信息到链表,退出时再把链表信息全部覆盖写回文件里面。但是在实际操作中发现自己对链表这一块还是不太熟悉,所以又去找了一些和链表有关的资料。最后自己就边摸索着尝试了一下,最后发现原来也不是特别难,其实最大的欠缺就是动手能力差。这次的程序设计,我觉得不仅是让我复习了上学期学过的内容,更是发现了自己在学习上的许多缺点和不足,也是给了自己一个反省的机会,我觉得自己在以后的学习中必须要将理论与实际相结合,在巩固理论知识的基础上一定要将其付诸实践,要敢于尝试,不要让一次的失败就让自己士气全无。附(源代码):#include

16、<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<conio.h>struct user/用户信息 char username20; char password8;typedef struct wp /定义数据结构char name20; /*名称*/char number6;/*编号*/char price6;/*价格*/char categoty10; /*分类*/char MFG9; /*生产日期*/char EXP9; /*过期时间*

17、/struct wp *next;Goods;void Newuser(void)/创建新账户 printf(" 欢迎创建新账户!n"); FILE *fp;char p10;int i=0; void encrypt(char *mima);/加密算法 struct user su; if(fp=fopen("f:usermessage","a+")=NULL) printf("文件打开失败!n"); exit(0); printf("请输入新账号:"); scanf("%s&quo

18、t;,su.username); printf(" 请输入密码:"); while(pi=getch()!='r') printf("*"); i+; pi='0' strcpy(su.password,p); encrypt(su.password); fprintf(fp,"%s %sn",su.username,su.password); if(fclose(fp) printf("文件无法关闭!n"); exit(0); printf("n 恭喜你成功创建新账户!n

19、");void encrypt(char *mima)/加密程序 int i,j; j=strlen(mima); for(i=0;i<j;i+) mimai=mimai15;int Login(char *mark)/用户登录 system("color 0A"); struct user su; FILE *fp; int i=0; char usr30,usr130,mima10,p10; int check=0; printf("请输入账号名称:");scanf("%s",su.username); print

20、f("请输入登录密码:"); while(pi=getch()!='r') printf("*"); i+; pi='0' strcpy(su.password,p); strcpy(usr,su.username); strcpy(mima,su.password); encrypt(mima); strcat(usr," ");strcat(usr,mima);strcat(usr,"n"); if(fp=fopen("f:usermessage","

21、;r")=NULL) printf("File open error!n"); exit(0); while(!feof(fp) fgets(usr1,30,fp); if(strcmp(usr,usr1)=0) check=1;break; if(fclose(fp) printf("Can not close the filen"); exit(0); if(check=1) printf("n 恭喜你,登陆成功!n");/登陆成功 strcpy(mark,su.username); return 1; else pri

22、ntf("n 用户名或密码错误,请重新登陆n"); return 0; void Save(Goods *h,char *mark)/保存记录FILE *fp;Goods *p;char wp20;strcpy(wp,mark);strcat(wp,".dat");if(fp=fopen(wp,"wb")=NULL)printf(" Can't open the file!n");exit(0);printf("n Save succefully!n");p=h;while(p!=NUL

23、L)fwrite(p,sizeof(Goods),1,fp);p=p->next;fclose(fp);Goods *Load(char *mark)/读入记录Goods *p,*q,*h=NULL;char ch;FILE *fp;char wp20;strcpy(wp,mark);system("cls");strcat(wp,".dat");if(fp=fopen(wp,"ab+")=NULL)printf(" Can't open the file!n");exit(1);p=(Goods *

24、)malloc(sizeof(Goods);if(!p)printf(" Memory overflow!n");return h;h=p;ch=fgetc(fp);if(ch=EOF) h=NULL; p->next=NULL; return h; rewind(fp);while(!feof(fp)if(1!=fread(p,sizeof(Goods),1,fp)break;p->next=(Goods *)malloc(sizeof(Goods);if(!p->next)printf(" Memory overflow!n");r

25、eturn h;q=p;p=p->next;q->next=NULL;fclose(fp);return h;void Excel(char *mark)/新功能,将物品信息导出至Excel表格 system("cls"); Goods *p,*head=Load(mark);p=head; FILE *fpex; int i=0; if(fpex=fopen("goods.xls","w")=NULL) system("color 04"); printf("文件导出失败!");

26、exit(0); fprintf(fpex,"名称编号价格(元)分类生产日期过期时间n"); while(p!=NULL) fprintf(fpex,"%s%s%s%s%s%sn",p->name,p->number,p->price,p->categoty,p->MFG,p->EXP); p=p->next; i+; if(fclose(fpex) printf("Can't close the file!n");exit(0); if(i) printf("n"

27、); printf(" n"); printf(" 文件成功导出至“goods.xls”.n"); printf(" n"); else system("color 04"); printf("nn"); printf("导出至文件“goods.xls”失败!n"); printf("n"); void DeleteGoods(char *mark)/给定物品名或编号,删除该个人物品信息 system("cls"); char s10;

28、int i=0,a=1,j=0;int k; Goods *p,*q,*head=Load(mark); p=head; while(a=1) printf("输入要删除物品名或编号:"); scanf("%s",s); while(p!=NULL) i+; if(strcmp(s,p->name)=0) break; if(strcmp(s,p->number)=0) break; p=p->next; ; if(p!=NULL) printf("#"); printf(" 要删除物品名:");

29、 printf("%sn",p->name); printf(" 要删除物品编号:"); printf("%sn",p->number); printf(" 要删除物品价格:"); printf("%sn",p->price); printf("要删除物品生产日期:"); printf("%sn",p->MFG); printf(" 要删除物品分类:"); printf("%sn",p->

30、;categoty); printf("要删除物品过期时间:"); printf("%sn",p->EXP); printf("#"); a=2; else printf("您要删除的物品不存在!请重新输入!n"); printf("你确定要删除该物品的信息吗?n1.是 2.否n"); scanf("%d",&k); if(k=1) if(i=1)head=head->next; else p=head; while(p->next&&

31、;j<i-2) p=p->next;+j; if(!(p->next)|j>i-1)exit(0); q=p->next;p->next=q->next; free(q); Save(head,mark); printf(" 你已成功删除该物品信息!n"); else printf("你已取消删除操作!n");void AddNewGoods(char *mark)/录入个人物品信息 system("cls"); Goods *p,*head,*s,*q; head=Load(mark);p=

32、q=head;int a=1; s=(Goods*)malloc(sizeof(Goods); printf("n"); printf(" 请输入新物品信息 n"); printf("n"); printf(" 输入物品名称:"); scanf("%s",s->name); while(a=1) while(q!=NULL) if(strcmp(s->name,q->name)=0) break; q=q->next; ; if(q!=NULL) printf("

33、;该物品名已存在,请重新输入物品名:"); scanf("%s",s->name); q=head; else a=2; q=head; printf(" 输入物品编号:"); scanf("%s",s->number); while(a=2) while(q!=NULL) if(strcmp(s->number,q->number)=0) break; q=q->next; ; if(q!=NULL) printf("该物品编号已存在,请重新输入物品编号:"); scanf

34、("%s",s->number); q=head; else a=3; q=head; printf(" 输入物品价格(元):"); scanf("%s",s->price); printf(" 日期输入格式(例:20150101)n"); printf(" 输入物品生产日期:"); scanf("%s",s->MFG); printf(" 输入物品过期日期:"); scanf("%s",s->EXP); pri

35、ntf(" 输入物品分类:"); scanf("%s",s->categoty); s->next=NULL; if(p=NULL) Save(s,mark); else while(p->next!=NULL) p=p->next; p->next=s; Save(head,mark);void SearchGoods(char *mark)/根据输入的物品名或编号,显示查找到的相应物品信息 system("cls"); char s10; printf("输入物品名或编号:");

36、scanf("%s",s); Goods *head,*q; head=Load(mark);q=head; while(q!=NULL) if(strcmp(s,q->name)=0) break; if(strcmp(s,q->number)=0) break; q=q->next; ; if(q!=NULL) printf(" 物品名:"); printf("%sn",q->name); printf(" 物品编号:"); printf("%sn",q->nu

37、mber); printf(" 物品价格:"); printf("%sn",q->price); printf(" 物品生产日期:"); printf("%sn",q->MFG); printf(" 物品过期日期:"); printf("%sn",q->EXP); printf(" 物品分类:"); printf("%sn",q->categoty);else printf("没有找到该物品!n&quo

38、t;);void ChangeGoods(char *mark)/给定物品名或编号,修改该个人物品信息 system("cls"); char s10;int choice=0;int i=1;int k; printf("输入要修改物品名或编号:"); scanf("%s",s); Goods *head,*p,*q; Goods w; head=Load(mark);p=q=head; while(p!=NULL) if(strcmp(s,p->name)=0) break; if(strcmp(s,p->number

39、)=0) break; p=p->next; ; if(p!=NULL) printf("#"); printf(" 修改物品基本信息:n"); printf(" 物品名:"); printf("%sn",p->name); printf(" 物品编号:"); printf("%sn",p->number); printf(" 物品价格:"); printf("%sn",p->price); printf(&qu

40、ot; 物品生产日期:"); printf("%sn",p->MFG); printf(" 物品过期时间:"); printf("%sn",p->EXP); printf(" 物品分类:"); printf("%sn",p->categoty); printf("#"); printf(" 请输入要修改的物品信息:n"); printf("1.物品名"); printf(" 2.物品编号n"); printf("3.物品价格"); printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论