C语言程序设计实验个人物品管理程序.docx
- 文档编号:30057960
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:39
- 大小:23.55KB
C语言程序设计实验个人物品管理程序.docx
《C语言程序设计实验个人物品管理程序.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验个人物品管理程序.docx(39页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验个人物品管理程序
《程序设计与算法综合实习I》
欧阳学文
题目:
个人物品管理程序
班级:
学生学号:
学生姓名:
指导老师:
提交时间:
.05.16
成绩:
评分项目
得分
功能完整性(40分)
界面美观性(10分)
设计合理性及创新性(20分)
答辩表现(20分)
报告撰写质量(10分)
华南农业大学信息学院
《个人物品管理程序》
1.问题描述
1.1问题描述
设计一个个人物品管理程序,该程序具有以下功能:
(1)用户登录:
输入用户名和密码,密码正确才允许登录。
(2)录入个人物品信息;
(3)给定物品名或编号,修改该个人物品信息;
(4)给定物品名或编号,删除该个人物品信息;
(5)根据输入的物品名或编号,显示查找到的相应物品信息;
(6)根据输入的分类,显示该分类的所有物品信息;
(7)根据输入的时间,查询过期或3月内将过期的物品信息;
(8)统计功能:
统计各分类的物品。
(9)新功能:
导出个人物品信息至Excel表格。
1.2系统功能分析
(1)登录功能:
这是一个个人物品管理程序,具有很大的开放性,已经注册的用户可以直接输入密码登陆系统,没有注册的用户可以根据自己的需要注册账户,并输入个人物品信息。
(2)录入个人物品信息:
这个系统设置录入的物品信息主要包括物品的名称、编号、价格、分类、生产日期和过期日期。
(3)给定物品名或编号,修改个人物品信息:
要修改物品信息时,输入物品的编号或名称查看物品信息,确认无误后可以选择对应的物品信息进行修改。
(4)给定物品名或编号,删除个人物品信息:
要删除物品信息时,输入物品的编号或名称查看物品信息,确认无误后可以删除该物品信息。
(5)根据输入的物品名或编号,显示查找到的相应物品信息:
输入你想查找的物品名或编号,若找到对应物品信息,则显示;否则提示用户查找的物品不存在,请重新输入想要查找的物品名或编号。
(6)根据输入的分类,显示该分类的所有物品信息:
若找到则显示该分类的物品信息,否则提示用户该分类不存在。
(7)根据输入的时间,查询已过期或3个月内将过期的物品信息:
将物品的过期时间与输入时间作比较,若过期时间与输入时差小于3个月则输出对应物品信息。
(8)统计功能:
统计各分类的物品信息。
(9)导出个人物品信息至Excel表格:
每个人都可以将自己的物品信息导出至Excel
表格,可以对自己的个人物品信息一目了然。
1.3开发平台及工具介绍
我这个程序是使用Code:
:
Blocks10.05编写的,它是一个开放源码的全功能的跨平台C/C++集成开发环境,它使用了著名的的图形界面库wxWidgets版。
它还提供了许多工程模板,包括控制台应用、DirectX应用和动态链接库等,另外它还支持用户自定义模板;它支持语法彩色醒目显示,支持代码完成,支持工程管理、项目构建、调试;它还具有灵活而强大的配置功能。
1.系统设计
2.1系统总体结构设计
(1)运行程序时,一开始我设置了对系统进行操作的选择界面,包括3个功能,一是登录系统,二是创建新账户,三是退出程序。
用户可以根据自己的实际情况进行选择,输入对应的操作数从而选择不同的功能。
我在这里使用了switchcase语句。
当用户选择了登陆系统或创建新账户操作时,程序会要求输入账号(20个字符以内),以及密码(10个字符以内),在输入密码时我使用了getch()函数(在头文件conio.h中)隐藏用户密码信息,当用户登陆成功或创建新用户成功时程序就会进入功能选择界面;如果用户选择退出程序,程序运行停止。
(2)功能选择界面,我提供了九个功能选择,分别是录入个人物品信息、给定物品名或编号,修改该个人物品信息、给定物品名或编号,删除该个人物品信息、根据输入的物品名或编号,显示查找到的相应物品信息、根据输入的分类,显示该分类的所有物品信息、根据输入的时间,查询已过期或3个月内将过期的物品信息、统计功能:
统计各分类的物品信息、导出个人物品信息至Excel表格、退出到登陆界面。
根据用户输入的操作数,我使用了switch语句实现相应功能。
(3)录入个人物品信息:
录入的物品信息包括物品的名称、编号、价格、分类、生产日期和过期日期。
我首先将信息录入链表中,之后用自定义的保存函数Save()将信息存入文件中。
(4)给定物品名或编号,删除个人物品信息:
先输入要删除的物品名或编号,之后再通过文件指针在文件中找到相应物品信息并输出,用户确定无误后可以自行选择删除与否,若删除再调用Save函数,否则退回到功能选择界面。
(5)给定物品名或编号,修改个人物品信息:
与删除个人物品信息一样,根据输入的物品名或编号,通过文件指针找到物品信息并输出,用户可以根据自己的需要选择修改对应的信息,在确认修改后,通过Save函数保存信息,放弃修改则退回功能选择界面。
(6)根据输入的物品名或编号,显示查找到的相应物品的所有信息,这也是通过文件指针实现的查找。
(7)根据输入的分类,显示该分类的所有物品信息:
输入想查找的分类,使用一个字符数组记录输入的分类,使用文件指针对文件进行只读操作,将输入的分类与fgets()读出的分类比较,若相同则输出对应物品所有信息,直到文件指针为空。
(8)根据输入的时间,查询已过期或3个月内将过期的物品信息:
按照固定的时间输入格式(如1月1日则写成0101)输入时间,再与文件中的过期时间比较,通过比较,输出输入时间与过期时间之差小于3个月的物品信息。
(9)统计功能:
统计各分类的物品信息,使用文件指针对文件进行读操作,分别记录不同分类的物品个数,之后输出分类信息和对应的物品个数。
(10)导出个人物品信息至Excel表格:
创建新的文件指针,将链表里的信息写入名为“goods.xls”的Excel文件里,输出的时候包括跳格符‘\t’和换行符‘\n’符号,保证输出格式的正确性。
(11)退出到登陆界面,其他用户可以继续使用该系统。
2.2数据结构设计
我主要定义了用户信息结构user和物品信息结构Goods,还有使用了3个文件,分别用于存放用户信息和物品信息。
用户信息结构体
structuser
{
charusername[20];
charpassword[8];
};
username是账号,password是密码。
物品信息结构体
typedefstructwp//定义数据结构
{
charname[20];/*名称*/
charnumber[6];/*编号*/
charprice[6];/*价格*/
charcategoty[10];/*分类*/
charMFG[9];/*生产日期*/
charEXP[9];/*过期时间*/
structwp*next;
}Goods;
2.3系统各个函数及函数之间关系设计
开始
登
陆
系
统
2.4界面设计
(1)开始界面
(2)功能选择界面
(3)查找物品界面
(4)录入新物品
(5)删除物品信息界面
(6)修改物品信息界面
(7)输出物品分类界面
(8)查询过期物品界面
(9)统计分类信息界面
(10)导出物品信息到Excel表格界面
3.系统实现
①登陆模块登录系统
欢迎使用个人物品管理系统创建新账户
退出系统
选择对应操作,登陆时用户名或密码错误会提示输入账号或密码错误,并退回到本界面;创建新账户成功后会提示创建成功,并退到本界面,只需用刚创建的用户名和密码登陆即可,只有用户和密码都正确,才会提示登陆成功并跳转到功能选择界面。
②录入个人物品信息
物品名称
物品编号
物品价格
录入物品信息
物品分类
生产日期
过期时间
按照提示输入相应的物品信息。
③输入物品名或编号之后,程序会输入对应物品信息,确认删除后才会删除对应物品信息并保存。
物品名称
物品编号
物品价格
删除物品信息
物品分类
生产日期
过期时间
④修改物品信息:
输入物品名或编号之后,程序会输入对应物品信息,可以选择对应信息进行修改。
列出要修改物品所有信息
修改物品信息
选择对应信息进行修改
⑤查找物品信息
输入物品名或编号
查找物品信息
列出对应物品信息
⑥根据输入的分类,显示该分类的所有物品信息
输入物品分类
根据输入分类显示物品信息
列出对应物品信息
⑦根据输入的时间,查询已过期或3个月内将过期的物品信息
输入查询时间
查询过期物品或三个月内过期物品
比较输入的时间和过期时间
输出对应物品信息
⑧统计功能:
统计各分类的物品信息
用不同变量记录不同分类的物品个数
统计各分类的物品信息用文件指针对文件进行读写
输出物品分类及对应物品个数
⑨导出个人物品信息至Excel表格
输出物品存储信息项目名称
导出物品信息到Excel表格
1.系统测试
(1)设计测试用例:
登陆账号名称:
30330101密码:
123456
名称
编号
价格(元)
分类
生产日期
过期时间
钢笔
1
100
文具
0101
0101
笔芯
2
10
文具
0101
0101
尺子
3
5
文具
0101
0101
铅笔
4
10
文具
0101
0101
可乐
5
5
饮料
0101
0601
雪碧
6
5
饮料
0101
1001
加多宝
7
5
饮料
0201
0801
水壶
8
50
日常用品
0101
0101
书
9
10
生活用品
0101
0101
手表
11
50
用具
0101
0101
物品信息:
录入个人物品信息:
名称:
水杯编号:
10价格:
50分类:
日常用品生产日期:
0101
过期时间:
0101
删除物品信息:
名称:
钢笔编号:
01
修改个人物品信息:
修改编号为11的物品名称为灯
查找物品信息:
查找编号为10的物品信息
根据输入分类输出该分类所有物品:
输入文具
过期物品查询:
输入时间为0101
统计各分类物品个数;
导出物品信息到Excel表格;
预期结果:
全都符合要求。
1.系统运行界面:
①登录系统
②录入个人物品信息
③删除物品信息
④修改个人物品信息
⑤查找物品信息
⑥根据输入分类输出该分类所有物品
⑦过期物品查询
⑧统计各分类物品个数
⑨导出物品信息到Excel表格
(3)运行结果与预期结果相同。
1.总结
刚开始设计时毫无头绪,代码也是写得一团糟,感觉自己对上学期的内容好陌生,所以决定还是先把有关内容看一遍。
后来我看了课本和上网查了有关资料,然后再仔细地看了一遍题目要求:
信息要求必须存在文件里面,而且数据操作要用链表,所以我将程序设计为开始时读取文件信息到链表,退出时再把链表信息全部覆盖写回文件里面。
但是在实际操作中发现自己对链表这一块还是不太熟悉,所以又去找了一些和链表有关的资料。
最后自己就边摸索着尝试了一下,最后发现原来也不是特别难,其实最大的欠缺就是动手能力差。
这次的程序设计,我觉得不仅是让我复习了上学期学过的内容,更是发现了自己在学习上的许多缺点和不足,也是给了自己一个反省的机会,我觉得自己在以后的学习中必须要将理论与实际相结合,在巩固理论知识的基础上一定要将其付诸实践,要敢于尝试,不要让一次的失败就让自己士气全无。
附(源代码):
#include
#include
#include
#include
#include
structuser//用户信息
{
charusername[20];
charpassword[8];
};
typedefstructwp//定义数据结构
{
charname[20];/*名称*/
charnumber[6];/*编号*/
charprice[6];/*价格*/
charcategoty[10];/*分类*/
charMFG[9];/*生产日期*/
charEXP[9];/*过期时间*/
structwp*next;
}Goods;
voidNewuser(void)//创建新账户
{
printf("欢迎创建新账户!
\n");
FILE*fp;charp[10];inti=0;
voidencrypt(char*mima);//加密算法
structusersu;
if((fp=fopen("f:
\\usermessage","a+"))==NULL)
{
printf("文件打开失败!
\n");
exit(0);
}
printf("请输入新账号:
");
scanf("%s",su.username);
printf("请输入密码:
");
while((p[i]=getch())!
='\r')
{
printf("*");
i++;
}
p[i]='\0';
strcpy(su.password,p);
encrypt(su.password);
fprintf(fp,"%s%s\n",su.username,su.password);
if(fclose(fp))
{
printf("文件无法关闭!
\n");
exit(0);
}
printf("\n恭喜你成功创建新账户!
\n");
}
voidencrypt(char*mima)//加密程序
{
inti,j;
j=strlen(mima);
for(i=0;i mima[i]=mima[i]^15;; } intLogin(char*mark)//用户登录 { system("color0A"); structusersu; FILE*fp; inti=0; charusr[30],usr1[30],mima[10],p[10]; intcheck=0; printf("请输入账号名称: ");scanf("%s",su.username); printf("请输入登录密码: "); while((p[i]=getch())! ='\r') { printf("*"); i++; } p[i]='\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","r"))==NULL) { printf("Fileopenerror! \n"); exit(0); } while(! feof(fp)) { fgets(usr1,30,fp); if(strcmp(usr,usr1)==0) { check=1;break; } } if(fclose(fp)) { printf("Cannotclosethefile\n"); exit(0); } if(check==1) { printf("\n恭喜你,登陆成功! \n");//登陆成功 strcpy(mark,su.username); return1; } else {printf("\n用户名或密码错误,请重新登陆\n"); return0; } } voidSave(Goods*h,char*mark)//保存记录 { FILE*fp; Goods*p;charwp[20]; strcpy(wp,mark); strcat(wp,".dat"); if((fp=fopen(wp,"wb"))==NULL) { printf("Can'topenthefile! \n"); exit(0); } printf("\nSavesuccefully! \n"); p=h; while(p! =NULL) { fwrite(p,sizeof(Goods),1,fp); p=p>next; } fclose(fp); } Goods*Load(char*mark)//读入记录 { Goods*p,*q,*h=NULL;charch; FILE*fp;charwp[20]; strcpy(wp,mark); system("cls");strcat(wp,".dat"); if((fp=fopen(wp,"ab+"))==NULL) { printf("Can'topenthefile! \n"); exit (1); } p=(Goods*)malloc(sizeof(Goods)); if(! p) { printf("Memoryoverflow! \n"); returnh; } h=p; ch=fgetc(fp); if(ch==EOF) { h=NULL; p>next=NULL; returnh; } rewind(fp); while(! feof(fp)) { if(1! =fread(p,sizeof(Goods),1,fp)) break; p>next=(Goods*)malloc(sizeof(Goods)); if(! p>next) { printf("Memoryoverflow! \n"); returnh; } q=p; p=p>next; } q>next=NULL; fclose(fp); returnh; } voidExcel(char*mark)//新功能,将物品信息导出至Excel表格 { system("cls"); Goods*p,*head=Load(mark);p=head; FILE*fpex; inti=0; if((fpex=fopen("goods.xls","w"))==NULL) { system("color04"); printf("文件导出失败! "); exit(0); } fprintf(fpex,"名称编号价格(元)分类生产日期过期时间\n"); while(p! =NULL) { fprintf(fpex,"%s%s%s%s%s%s\n",p>name,p>number,p>price,p>categoty,p>MFG,p>EXP); p=p>next; i++; } if(fclose(fpex)) { printf("Can'tclosethefile! \n");exit(0); } if(i){ printf("\n"); printf("┏━━━━━━━━━━━━━━┓\n"); printf("┃文件成功导出至“goods.xls”.┃\n"); printf("┗━━━━━━━━━━━━━━┛\n"); } else{ system("color04"); printf("\n┏━━━━━━━━━━━━━━━┓\n"); printf("┃导出至文件“goods.xls”失败! ┃\n"); printf("┗━━━━━━━━━━━━━━━┛\n"); } } voidDeleteGoods(char*mark){//给定物品名或编号,删除该个人物品信息 system("cls"); chars[10];inti=0,a=1,j=0;intk; 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("要删除物品名: "); printf("%s\n",p>name); printf("要删除物品编号: "); printf("%s\n",p>number); printf("要删除物品价格: "); printf("%s\n",p>price); printf("要删除物品生产日期: "); printf("%s\n",p>MFG); printf("要删除物品分类: "); printf("%s\n",p>categoty); printf("要删除物品过期时间: "); printf("%s\n",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&&j {p=p>next;++j;} if(! (p>next)||j>i1)exit(0); q=p>next;p>next=q>next; free(q); } Save(head,mark); printf("你已成功删除该物品信息! \n"); } elseprintf("你已取消删除操作! \n"); } voidAddNewGoods(char*mark)//录入个人物品信息 { system("cls"); Goods*p,*head,*s,*q; head=Load(mark);p=q=head;inta=1; s=(Goods*)malloc(sizeof(Goods)); printf("┌┬┬┬┬┬┬┬┬┬┐\n"); printf("├请输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 个人 物品 管理程序