又到了一年一度的毕业季,各种毕设又难倒了一片小老弟,写一两个demo练练手。
需求
随便拿了一个毕设题来弄,需求大概如下
- 用户分两类,一种是管理员,只有一个,一种是普通借阅者,需要注册,由管理员验证后才能登录系统,进行查询和借阅。
- 管理员的功能:新书录入,浏览,查询,修改和删除,审核注册。
- 借阅者的功能:查询状态并借阅,免费30天,超时要收费。
- 查询功能可以用书名搜,可以用作者名搜
- 借阅者注册需要信息:用户名,密码,确认密码,年龄,性别,联系方式
- 书本信息:书号,书名,作者,出版社,出版时间,图书价格。
需求分析
- 数据结构主要有两个,一个是书本的,一个是用户的。
为了简单设计,每套数,只馆藏一本,每个用户固定只能借3本。我这边的图书馆,馆藏一般都有2到3本,B级卡能借3本,现在升级到了6本,这个季节都变身成学生自习室了。 - 因为限定了3本,就要在用户结构中,放一个数组,用来存借到的书,而在图书结构中,放一个状态和时间,一旦被借出,状态就记录哪个用户借出的,并记录时间,这样还书的时候,就可以计算是否逾期,并计算需缴付的费用,暂定1毛钱一天。
系统设计
-
因为有要求用文件存放用户和书本信息,所以不用链表来做,直接文件操作就好了,为了简单设计,管理员密码单独一个文件,当进行管理员登录时,就从这个文件读取这个密码,如果这个文件不存在,就默认管理员空密码,避免缺少这个文件系统运行不了。注册用户放一个文件,因为书本要记录是哪个用户借出的,所以要添加一个用户ID,方便检索,所以文件头部需要一个记录下一个可分配的ID号,之后才是用户结构体块,每一个用户的地址是【文件头大小+用户ID号*块大小】.书本则不需要额外分一个ID,因为书本有唯一编号。
-
数据结构
//user
typedef struct user
{
int userID;
char userName[UNLEN];
char passWord[PWLEN];
int userAge;
int userSexy;
char userPhoneNum[12];
char userType; //区分管理员和普通用户
int userAttribute; //初始为0,管理员审核通过置1,不通过置-1
}USER;
//bookinfo
typedef struct book
{
char bookISBN[20];
char bookName[40];
char bookWirter[20];
char bookPublisher[10];
char bookPubTime[10];
int bookPrice;
int bookAttribute; //馆藏未借出为0,借出时记录借阅者ID
int time; //借出时间
}BOOKINFO;
辅助工具
一般做小demo和搞小项目的时候,除了编译器,我都会带上我的小伙伴:excel、xmind。
excel在做游戏的各种物品列表的时候,用字符串合并公式,很好的将一大张表迅速转成c的赋值格式,在文本中稍微调整一下,就可以用了,设置可以把注释也能加进去。
xmind能更直观的管理整个架构。