1 问题描述
作为一个应用软件,图书管管理系统将为师生提供一个与学校图书管的图书和个人信息交互的平台。根据系统界面的提示信息,操作者就可以对图书信息进行查询,借阅,还书,登陆个人账户则可以个人账户信息,管理员通过登陆管理员账户可以整理和修改书籍和学生信息。
2 开发环境
visual c++ 6
3 功能分析
角色1: 管理员
角色2: 学生
4 项目设计
4.1 程序结构设计
4.2 数据结构设计
程序中使用的特殊数据结构(非标准c的基本数据类型)。
存储学生数据的结构:
typedef struct information
info;
用于存储图书数据的结构:
typedef struct student
studentdat;
4.3 主要算法
(1)查询书籍函数:findbo
12340
(2)登录函数: checkaccyn
(3)更改书籍函数: changebo
12340
(4)删除书籍函数: delbookyn
(5) 添加图书信息功能:addbookyn
5 程序运行及调试
(1)进入系统
(2)创建数据
(3)主菜单
(4) 实现的主要功能
6 总结
首先说说系统运用的原理,主要是是图书数据和学生数据的动态存储与调用,通过函数之间的相互调用实现系统各级菜单的层次递进。操作者运行系统时需要先检查是否存在相应的数据文件,如果没有则说明系统首次运行,待初始化数据后,需要建立针对图书数据和学生数据的两个不同的独立链表,并且将链表数据存储到文件中,随后向各个函数传入链表首地址(首地址固定),根据各个函数功能的不同,如果需要更改学生或者图书数据,则直接通过对链表的删除、增加和查询实现对学生信息以及图书信息的访问、修改和调用操作。随后系统将修改后的链表数据再次存入固定文件中,操作者每次运行系统时,重复以上对链表和文件的操作,以此实现外界和系统存储数据的动态交互,提高系统运行效率。
此外,图书数据和学生数据以结构数据块的形式存储,便于操作。
这个图书管理系统几乎里面所有的东西都是c语言课程所讲的,比如说链表的创建、删除、排序、添加,结构体的正确使用,文件的创建、存储、读取,指针的操作,函数之间参数的传递等等。在开始着手完成整个系统之前,我先写出了所有会用到的函数声明,同时根据系统的各级之间嵌套关系和调用关系确定了所有必须用到的和需要传递的参数,甚至预先还画出了流程图,我觉得这样的话思路会比较清晰,而不是写一点**,再想想会用到的东西。虽然这样,最后我还是发现了**存在一些问题,因为写每个函数时没有单独调试,到最后还是稍显麻烦,同时也是因为层层嵌套的原因,导致一个地方改动的话,很多地方都要稍加改动,这些以后都可以稍加注意,可以提高自己的工作速率。
对于自己着手的这个图书管理系统,我觉得功能实现的还是比较完善的,本参照一个真正的系统的使用情况,我对多方面都进行了考虑,也从用户自身的角度来对**进行了相应的优化,比如每个一些函数结束之后会自动弹出功能菜单来提示操作者接下来可能要执行的各种操作,还有就是如果用户某一项操作没有成功之后,会清楚地提示让用户做出正确的选择,而不是程序死在一个地方或是毫无提示信息。不过仍然有一些东西我觉得还有点欠缺,函数之间的嵌套关系导致了很多函数需要传入更多的参数、系统从链表读取数据之后是以二进制的形式来存入文件中的,这样虽然在数据量大的情况下能够提高程序的运行效率,但是操作者却不能像修改txt文件那样直接在文件中修改数据,管理员要想更改数据还必须在运行系统之后调用相应的系统功能函数来实现更改操作,这样的话在数据量巨大的情况下略显繁琐。
7 主要源**
#include
#include
#include
#include
#define stu sizeof(studentdat)
#define bok sizeof(info)
#define stunum 10
#define bonum 10
typedef struct information
info;
typedef struct student
studentdat;
void sy**enu系统主要主菜单
void chomenu登录账户界面
studentdat*加载stu加载学生数据
信息* loadbo加载书数据
void menufir (char stunumber, studentdat *shead, info *bhead, char manalimit主要功能界面
void borret (info *bhead, char stunumber, studentdat *shead, char manalimit借还书界面
void findbo (info *bhead, char stunumber, studentdat *shead, char manalimit查询书籍
studentdat*创建stu创建学生数据
信息* createinfo创建书籍数据
void studat(studentdat *shead, char stunumber学生状态信息
void checkacc (char stunumber, studentdat *shead, info *bhead, char manalimit登录账户检查
void bottowbo (char number, info *bhead, studentdat *shead, char manalimit借书系统
void returnbo (char number, info *bhead, studentdat *shead, char manalimit还书系统
void print (info *bhead全部显示
void changedat (info *bhead, studentdat *shead, char manalimit, char stunumber更改系统数据
void delstu (info *bhead, studentdat *shead, char manalimit, char stunumber删除学生
void addstu (info *bhead, studentdat *shead, char manalimit, char stunumber增添学生
void delbook (info *bhead, studentdat *shead, char manalimit, char stunumber删除书籍
void addbook (info *bhead, studentdat *shead, char manalimit, char stunumber增添书籍
void changebo (info *bhead, studentdat *shead, char manalimit, char stunumber更改图书数据
void changestu (info *bhead, studentdat *shead, char manalimit, char stunumber更改学生数据
void changeacc (char stunumber, studentdat *shead, info *bhead, char manalimit更改账户密码
void checknam (info *bhead按书名查找
void checknum (info *bhead按编号查找
void checkaut (info *bhead按作者查找
int system(const char *string清屏操作
int main(void)
void sy**enu系统主菜单
else
}if (choise1 == 0)
}void chomenu登录账户界面
else
exit(0);
}studentdat*加载stu加载学生数据
else
p1 = (studentdat *)malloc(stu);
fread(p1, stu, 1, fp);
}p2-> next = null;
fclose (fp);
return head;
}信息* loadbo加载书数据
else
p1 = (info *)malloc(bok);
fread(p1, bok, 1, fp);
}p2-> next = null;