C语言程序设计实验的个人物品管理系统程序Word文件下载.docx
《C语言程序设计实验的个人物品管理系统程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验的个人物品管理系统程序Word文件下载.docx(40页珍藏版)》请在冰豆网上搜索。
1.3开发平台及工具介绍
我这个程序是使用Code:
:
Blocks10.05编写的,它是一个开放源码的全功能的跨平台C/C++集成开发环境,它使用了著名的的图形界面库wxWidgets版。
它还提供了许多工程模
板,包括控制台应用、DirectX应用和动态链接库等,另外它还支持用户自定义模板;
它
支持语法彩色醒目显示,支持代码完成,支持工程管理、项目构建、调试;
它还具有灵活而强大的配置功能。
1.系统设计
2.1系统总体结构设计
(1)运行程序时,一开始我设置了对系统进行操作的选择界面,包括3个功能,一是
登录系统,二是创建新账户,三是退出程序。
用户可以根据自己的实际情况进行选择,输入对应的操作数从而选择不同的功能。
我在这里使用了switch-case语句。
当用户选择了
登陆系统或创建新账户操作时,程序会要求输入账号(20个字符以内),以及密码(10个
字符以内),在输入密码时我使用了getch()函数(在头文件conio.h中)隐藏用户密码信息,当用户登陆成功或创建新用户成功时程序就会进入功能选择界面;
如果用户选择退出程序,程序运行停止。
(2)功能选择界面,我提供了九个功能选择,分别是录入个人物品信息、给定物品名
或编号,修改该个人物品信息、给定物品名或编号,删除该个人物品信息、根据输入的物品名或编号,显示查找到的相应物品信息、根据输入的分类,显示该分类的所有物品信息、根据输入的时间,查询已过期或3个月内将过期的物品信息、统计功能:
统计各分类的物
品信息、导出个人物品信息至Excel表格、退出到登陆界面。
根据用户输入的操作数,我
使用了switch语句实现相应功能。
(3)录入个人物品信息:
录入的物品信息包括物品的名称、编号、价格、分类、生产
日期和过期日期。
我首先将信息录入链表中,之后用自定义的保存函数Save()将信息存
入文件中。
先输入要删除的物品名或编号,之后再通过文件指针在文件中找到相应物品信息并输出,用户确定无误后可以自行选择删除与否,若删除再调用Save函数,否则退回到功能选择界面。
(5)给定物品名或编号,修改个人物品信息:
与删除个人物品信息一样,根据输入的物品名或编号,通过文件指针找到物品信息并输出,用户可以根据自己的需要选择修改对应的信息,在确认修改后,通过Save函数保存信息,放弃修改则退回功能选择界面。
(6)根据输入的物品名或编号,显示查找到的相应物品的所有信息,这也是通过文件指针实现的查找。
(7)根据输入的分类,显示该分类的所有物品信息:
输入想查找的分类,使用一个字符数组记录输入的分类,使用文件指针对文件进行只读操作,将输入的分类与fgets()读
出的分类比较,若相同则输出对应物品所有信息,直到文件指针为空。
(8)根据输入的时间,查询已过期或3个月内将过期的物品信息:
按照固定的时间输
入格式(如2015年1月1日则写成20150101)输入时间,再与文件中的过期时间比较,通过比较,输出输入时间与过期时间之差小于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)开始界面
「!
」5x£
T璧KIX兰百XJL-审II■翌rFL
II
恭喜你,登陆成功辛
青选择你的操作:
3579-
I.-
•••信面息息自菜K界=口亠一亘一一口分陆查s^s-退
•童■唇M息ngj=断恃物口塌品物加霽岀増専
(3)查找物品界面
丁询生过物
」□□辐1'
|日日分讨品品严期品
钢笔
01
100
2014010120160101文具
(4)录入新物品
灯01617品
AI-I-S000二匚I5221H
^=口■'
T1)01書元01日日分
品口2—15亠严期品
生过物入入廉品舅
IAA
输
期
S
请选择你的操作;
♦登陆巨统
2.厠建新址户
3•逋岀糠洋
竈SMMTifiMXKmflC梵XlMMiiMKitiMMratiKliKitJiCKMiiMKKaifIffXiKMrKiMliK梵MEKXiMlCHiM
(2)功能选择界面
称:
201430330101
7|51:
KHKMMK
SavesuccefLilly*
(5)删除物品信息界面
_「杠期土八间
昨灯0询品170魁台1550溯用20
删物品品严口跚tttt该生常tttt除品flfl删吾要后
1111要專要除朋宀疋2
##删删朋W疋
(6)修改物品信息界面
1
(7)输出物品分类界面
-契具具具具
畏IX
具
(8)查询过期物品界面
钢甘
芯子桑碧多壶表笙尺铅屬加峯手
宝
号
编0102
0708
防11
s15
5
55
00
15
品品
用用齐K具具具常活具劳文文文亲
饮饮饮日生用
i
!
20140131
I201S0101
:
20149101
2Bi50iei
20159101
2915B101
201502B1
20140101
28140101
I过期时间:
20160101!
120160181!
20160101:
120156601:
120151001!
20150801:
2616S101!
201&
01QI1!
201B0101!
(9)统计分类信息界面
物品各分类数目:
ffi=3
日常用品汽生活用品:
丄用具汽
(10)导出物品信息到Excel表格界面
3.系统实现
1登陆模块登录系统
欢迎使用个人物品管理系统创建新账户
退出系统
选择对应操作,登陆时用户名或密码错误会提示输入账号或密码错误,并退回到本界
面;
创建新账户成功后会提示创建成功,并退到本界面,只需用刚创建的用户名和密码登
陆即可,只有用户和密码都正确,才会提示登陆成功并跳转到功能选择界面。
2录入个人物品信息
物品名称
物品编号
物品价格
录入物品信息
物品分类
生产日期
过期时间
按照提示输入相应的物品信息。
3输入物品名或编号之后,程序会输入对应物品信息,确认删除后才会删除对应物品
信息并保存。
删除物品信息
4修改物品信息:
输入物品名或编号之后,程序会输入对应物品信息,可以选择对应
信息进行修改。
列出要修改物品所有信息
修改物品信息
选择对应信息进行修改
5查找物品信息
输入物品名或编号查找物品信息
列出对应物品信息
6根据输入的分类,显示该分类的所有物品信息
输入物品分类根据输入分类显示物品信息
7根据输入的时间,查询已过期或3个月内将过期的物品信息
查询过期物品或三个月内过期物品
⑧统计功能:
统计各分类的物品信息
输入查询时间
比较输入的时间和过期时间
输出对应物品信息
用不同变量记录不同分类的物品个数
用文件指针对文件进行读写
输出物品分类及对应物品个数
⑨导出个人物品信息至Excel表格
输出物品存储信息项目名称
导出物品信息到Excel表格
1.系统测试
(1)设计测试用例:
登陆账号名称:
201430330101密码:
123456
名称
编号
价格
(元)
分类
文具
20140101
20160101
笔芯「
2
10
20150101
尺子
3
铅笔
4
可乐
饮料
20150601
雪碧
6
20151001
加多宝
7
20150201
20150801
水壶
8
50
日常用品
书「
9
生活用品
手表
11
用具
物品信息:
录入个人物品信息:
名称:
水杯编号:
10价格:
50分类:
日常用品生产日期:
过期时间:
删除物品信息:
钢笔编号:
修改个人物品信息:
修改编号为11的物品名称为灯
查找物品信息:
查找编号为10的物品信息
根据输入分类输出该分类所有物品:
输入文具
过期物品查询:
输入时间为20160101
统计各分类物品个数;
导出物品信息到Excel表格;
预期结果:
全都符合要求。
1.系统运行界面:
①登录系统
恭喜你.登陆成功?
②录入个人物品信息
日期输
杯常1416粗号)=01>
^^k番元01日日分品品<
15亠严期S
生过物入入*品口哭
Sauesuccefully*
SavesuccefullyT你已成功删除该物品信息!
③删除物品信息
④修改个人物品信息
删删置疋要要辆尔」
ffl11利砂笔pm具询ttH100y^0#4-01252
删名品脯口鏡价耳时tttt物器物胡品C剧啊该除即粕要要煮tttt要要除要除nil定
表
毛1150
ttn息名口忑息mt信口鏡价日貝卩加4^品品严期品赫口畧tttt基物品iiit品品品删的物tttt物谢«
tt改后?
tttt改ttlt修魯3
y—S
删入入改否tttt请匾疋2抽—SE疋
M你」1
Savesucceful1^!
物启信息已完成修改?
⑤查找物品信息
鎗日分
品品严期品
过物
⑥根据输入分类输出该分类所有物品
具具具
⑦过期物品查询
宝烹子橐碧多壶杯萤尺铅kiM加峯灯水
格
00@000^T1515555155
品品01
FTPFTPi
0J类具具常活具16八殳文条饮饮日生用20n—sI—nftnBlvnIPft—InIB
;
120150101120140101128150101126150101!
0101120150291
126140101
128140101
;
过期时间;
!
201681B1!
i201601Sl!
20150681!
1001!
120150801:
:
20160101i
I201501S1:
20140101!
8统计各分类物品个数
Excel表格
类:
1:
1分品品01<
rr3□T-1>
-匚■■:
n^j「n八■■0品盘常活具16莎蠹中士用Z0
⑨导出物品信息到
O-
P"
5
匚10
类具具具
E1F生产日期过期时间20150101201601012014010120160101201501012016010120150101201506012015010120151001
欧料
日常用品生活用品用具
2014010120140101日常用品
2015080120160101
2015010120140101
(3)运行结果与预期结果相同。
1.总结
刚开始设计时毫无头绪,代码也是写得一团糟,感觉自己对上学期的内容好陌生,所以决定还是先把有关内容看一遍。
后来我看了课本和上网查了有关资料,然后再仔细地看了一遍题目要求:
信息要求必须存在文件里面,而且数据操作要用链表,所以我将程序设计为开始时读取文件信息到链表,退出时再把链表信息全部覆盖写回文件里面。
但是在实际操作中发现自己对链表这一块还是不太熟悉,所以又去找了一些和链表有关的资料。
最后自己就边摸索着尝试了一下,最后发现原来也不是特别难,其实最大的欠缺就是动手能力差。
这次的程序设计,我觉得不仅是让我复习了上学期学过的内容,更是发现了自己在学习上的许多缺点和不足,也是给了自己一个反省的机会,我觉得自己在以后的学习中必须要将理论与实际相结合,在巩固理论知识的基础上一定要将其付诸实践,要敢于尝试,不要让一次的失败就让自己士气全无。
附(源代码)
#include<
stdio.h>
malloc.h>
#include<
string.h>
stdlib.h>
conio.h>
structuser//用户信息
};
charprice[6];
/*分类*/
charMFG[9];
voidNewuser(void)//创建新账户
\n"
);
printf("
欢迎创建新账户
FILE*fp;
charp[10];
inti=0;
voidencrypt(char*mima);
//加密算法
structusersu;
if((fp=fopen("
f:
\\usermessage"
"
a+"
))==NULL)
printf("
文件打开失败!
exit(O);
}
请输入新账号:
"
scanf("
%s"
su.username);
请输入密码:
while((p[i]=getch())!
='
\r'
)
*"
i++;
p[i]='
\0'
strcpy(su.password,p);
encrypt(su.password);
fprintf(fp,"
%s%s\n"
su.username,su.password);
if(fclose(fp))
文件无法关闭!
\n恭喜你成功创建新账户
voidencrypt(char*mima)〃加密程序
inti,j;
j=strlen(mima);
for(i=0;
i<
j;
i++)
mima[i]=mima[『15;
intLogin(char*mark)〃用户登录
system("
color0A"
inti=0;
charusr[30],usr1[30],mima[10],p[10];
intcheck=0;
请输入账号名称:
请输入登录密码:
“);
i++;
strcpy(usr,su.username);
strcpy(mima,su.password);
encrypt(mima);
strcat(usr,"
"
strcat(usr,mima);
if((fp=fopen("
r"
Fileopenerror!
exit(0);
while(!
feof(fp))
fgets(usr1,30,fp);
if(strcmp(usr,usr1)==0)
check=1;
break;
Cannotclosethefile\n"
if(check==1)
\n恭喜你,登陆成功!
陆成功
strcpy(mark,su.username);
return1;
else
{printf("
\n用户名或密码错误,请重新登陆\n"
return0;
voidSave(Goods*h,char*mark)〃保存记录
Goods*p;
charwp[20];
strcpy(wp,mark);
strcat(wp,"
.dat"
if((fp=fopen(wp,"
wb"
Can'
topenthefile!
\nSavesuccefully!
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;
cls"
ab+"
printf("
topenthe
file!
exit
(1);
p=(Goods*)malloc(sizeof(Goods));
if(!
p)
printf(”Memoryoverflow!
returnh;
h=p;
ch=fgetc(fp);
if(ch==EOF)
h=NULL;
p->
next=NULL;
rewind(fp);
if(1!
=fread(p,sizeof(Goods),1,fp))
next=(Goods*)malloc(sizeof(Goods));