




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言设计的图书管理系统设计实践报告1 问题描述图书管理系统作为一个应用软件将为学校的老师和学生提供一个与学校图书馆图书以及个人信息进行交互的平台。根据系统界面的提示信息,操作者就可以对图书信息进行查询,借阅,还书,登陆个人账户则可以个人账户信息,管理员通过登陆管理员账户可以整理和修改书籍和学生信息。2 开发环境visual C+ 6.03 功能分析角色1: 管理员序号功能描述备注1书籍借阅2书籍归还账户状态有提示3查询书籍信息能按书名、作者、编号查找4修改账户密码5修改学生数据仅管理员有此权限6修改图书数据仅管理员有此权限7查询账户状态会提示还书角色2: 学生序号功能描述备注1书籍借阅2书籍归还账户状态有提示3查询书籍信息能按书名、作者、编号查找4修改账户密码7查询账户状态会提示还书4 项目设计4.1 程序结构设计借书基本信息借阅状态还书 查询账户 普通账户 进入 退出 系 统 管理员作者编号全部显示书名 查询书籍修改密码 修改账户图书信息学生信息 修改数据库 借还书 管理权限4.2 数据结构设计程序中用到的特殊数据结构(非标准C的基本数据类型)。存储学生数据的结构体:typedef struct informationchar bookNum10;char bookNam50;char bookAut20;float bookPri;int status;struct information *next;info;存储图书数据的结构体:typedef struct studentchar stuNam20;char number10;char passKey20;int borrowSta;char key;struct student *next;studentDat;4.3 主要算法(1) 查询书籍函数:findBo 按编号choise开始choise?显示所有按书名按作者返回结束 1 2 3 4 0(2)登录函数: checkAcc登录结束输入数据检查账户有无数据账号密码帐号、密码开始存入文件 Y N(3) 更改书籍函数: changeBo增添书籍choise开始choise?更改编号更改状态删除书籍返回结束 1 2 3 4 0 (4)删除书籍函数: delBook结束继续?编号删除开始 存入文件 Y N (5) 添加书籍信息函数: addBook开始结束继续?输入书信息 排序插入链表存入文件 Y N5 程序运行及调试(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 10typedef struct informationchar bookNum10;char bookNam50;char bookAut20;float bookPri;int status;struct information *next;info;typedef struct studentchar stuNam20;char number10;char passKey20;int borrowSta;char key;struct student *next;studentDat;void sysMenu (); /系统初级主菜单 void choMenu (); /登录账号界面studentDat *loadStu(); /载入学生数据Info*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 *creatStu (); /创建学生数据Info*creatInfo(); /创建图书数据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); /按作者查找Intsystem(constchar*string); /清屏操作int main(void)sysMenu ();return 0;void sysMenu () /系统初级菜单int choise1;printf(n 欢迎使用图书管理系统 n);printf(- n);printf(- -n);printf(- 1.进入系统 | 0.退出系统 -n);printf(- -n);printf(- n);printf(n 请选择: );scanf(%d, &choise1);while (choise1 != 0)if (choise1 = 1)system(cls);choMenu ( );elseprintf(输入数据有误!请重输: );scanf(%d, &choise1);if (choise1 = 0)exit(0);void choMenu () /登录账号界面int choise2;char manaLimit, number10;studentDat *Shead;info *Bhead;printf(n 系统登录 n);printf( -n);printf( - -n);printf( - 1.管理员登录 -n);printf( - 2.普通账号登录 -n);printf( - 0.退出系统 -n);printf( - -n);printf( -n);printf(请选择: );scanf(%d, &choise2);while (choise2 != 0)if (choise2 = 1)manaLimit = 1;checkAcc (number, Shead, Bhead, manaLimit);elseif(choise2 = 2)manaLimit = 0;checkAcc (number, Shead, Bhead, manaLimit);elseprintf(输入数据有误!请重输: );scanf(%d, &choise2);exit(0);studentDat*loadStu() /载入学生数据int n;FILE *fp;studentDat *head, *p1, *p2;fp = fopen(Account.dat, rb+);n = 0;p1 = p2 = (studentDat *)malloc(STU);fread(p1, STU, 1, fp);head = NULL;while (!feof(fp)if (n = 0)head = p1;n = n + 1;elsep2- next = p1;p2 = p1;p1 = (studentDat *)malloc(STU);fread(p1, STU, 1, fp);p2- next = NULL;fclose (fp);return head;Info*loadBo() /载入图书数据FILE *fp;info *head, *p1, *p2;int n;fp = fopen(bookInfo.dat, rb+);n = 0;p1 = p2 = (info *)malloc(BOK);fread(p1, BOK, 1, fp);head = NULL;while (!feof(fp)if (n = 0)head = p1;n = n + 1;elsep2- next = p1;p2 = p1;p1 = (info *)malloc(BOK);fread(p1, BOK, 1, fp);p2- next = NULL;fclose(fp);return head;void menuFir (char stuNumber, studentDat *Shead, info *Bhead, char manaLimit) /主要功能界面int choise2;printf( |功能 菜单| n);printf( -n);printf( - -n);printf( - 1.查询书籍信息 -n);printf( - 2.借书与还书 -n);printf( - 3.个人账户状态 -n);printf( - 4.修改账户信息 -n);printf( - 5.修改数据【权限】 -n);printf( - 0.返回上级菜单 -n);printf( - 6.注销登录 -n);printf( - -n);printf( -n);printf( 注:“1”- yes “0”- no n );printf(n 请选择:n);scanf(%d, &choise2);if (choise2 = 6)exit(0);while (choise2 != 0)if (choise2 = 1)system(cls);findBo (Bhead, stuNumber, Shead, manaLimit);if (choise2 = 2)system(cls);borRet (Bhead, stuNumber, Shead, manaLimit);if (choise2 = 3)system(cls);stuDat(Shead, stuNumber);if (choise2 = 4)system(cls);changeAcc (stuNumber, Shead, Bhead, manaLimit);if (choise2 = 5)if (manaLimit = 0)system(cls);printf(很抱歉,你没有管理权限! 系统返回登录界面n);choMenu ( );elsesystem(cls);changeDat(Bhead, Shead, manaLimit, stuNumber);if (choise2 = 6)exit(0);printf(nnn);printf( |功能 菜单| n);printf( -n);printf( - -n;printf( - 1.查询书籍信息 -n);printf( - 2.借书与还书 -n);printf( - 3.个人账户状态 -n);printf( - 4.修改账户信息 -n);printf( - 5.修改数据【权限】 -n);printf( - 0.返回上级菜单 -n);printf( - 6.注销登录 -n);printf( - -n);printf( -n);printf( 注:“1”- yes “0”- no n );printf(n 请选择: );scanf(%d, &choise2);system(cls);choMenu ();void borRet (info *Bhead, char stuNumber, studentDat *Shead, char manaLimit) /借还书界面int choise4;printf(n |借书与还书| n);printf(-n);printf(- -n);printf(- 1.书籍借阅 -n);printf(- 2.书籍归还 -n); printf(- 0.返回上级菜单 -n);printf(- -n);printf(-n);printf(n请选择:n);scanf(%d, &choise4);while (choise4 != 0)if (choise4 = 1)system(cls);bottowBo (stuNumber, Bhead, Shead, manaLimit);if (choise4 = 2)system(cls);returnBo (stuNumber, Bhead, Shead, manaLimit);system(cls);menuFir (stuNumber, Shead, Bhead, manaLimit);void findBo (info *Bhead, char stuNumber, studentDat *Shead, char manaLimit) /查询书籍int choise3;printf(n | 查询书籍 | n);printf( -n);printf( - -n);printf( - 1.显示所有信息 -n);printf( - 2.按书名查找 -n);printf( - 3.按作者查找 -n);printf( - 4.按编号查找 -n);printf( - 0.返回上级菜单 -n);printf( - 5.注销登录 -n);printf( - -n);printf( -n);printf(n 请选择:n);scanf(%d, &choise3);if (choise3 = 5)exit(0);while (choise3 != 0)if (choise3 = 1)system(cls);print(Bhead);if (choise3 = 2)system(cls);checkNam (Bhead);if (choise3 = 3)system(cls);checkAut (Bhead);if (choise3 = 4)system(cls);checkNum (Bhead);if (choise3 = 5)exit(0);printf(nnnn);printf( -n);printf( - -n);printf( - 1.显示所有信息 -n);printf( - 2.按书名查找 -n);printf( - 3.按作者查找 -n);printf( - 4.按编号查找 -n);printf( - 0.返回上级菜单 -n);printf( - 5.注销登录 -n);printf( - -n);printf( -n);printf(n请选择: );scanf(%d, &choise3);system(cls);menuFir (stuNumber, Shead, Bhead, manaLimit);studentDat *creatStu () /创建学生数据FILE *fp;int choise, n;studentDat *Shead, *p1, *p2;studentDat *p;printf(现在开始创建学生数据:(第一位默认为管理者)n);n = 0;p1 = p2 = (studentDat *)malloc(STU);printf(请输入使用者数据:n);printf(请输入姓名: );scanf(%s, p1- stuNam);printf(请输入学号: );scanf(%s, p1- number);printf(请输入密码: );scanf(%s, p1- passKey);p1- borrowSta = 0;p1- key = 1;Shead = NULL;while (1)if (n = 0)Shead = p1;n+;elsep2- next = p1;p2 = p1;printf(成功存储一组数据!, 是否继续?(1 or 0)n);scanf(%d, &choise);if (choise = 0)break;p1 = (studentDat *)malloc(STU);printf(请输入姓名: );scanf(%s, p1- stuNam);printf(请输入学号: );scanf(%s, p1- number);printf(请输入密码: );scanf(%s, p1- passKey);p1- borrowSta = 0;p1- key = 0; p2- next = NULL;fp = fopen(Account.dat, wb);p = Shead;while (p != NULL)fwrite(p, STU, 1, fp);p = p- next;fclose(fp);return Shead;Info*creatInfo() /创建图书数据FILE *fp;int n, choise;info *Bhead, *p1, *p2, *p3;system(cls);printf(现在开始创建图书数据:n);n = 0;p1 = p2 = (info *)malloc(BOK);strcpy(p1- bookNum, NULL);strcpy(p1- bookNam, NULL);strcpy(p1- bookAut, NULL);p1- bookPri = 0;p1- status = 0;Bhead = NULL;while (1)if (n = 0)Bhead = p1;elsep2- next = p1;p2 = p1;printf(成功存储一组数据!, 是否继续?(1 or 0)n);scanf(%d, &choise);if (choise = 0)break;n = n + 1;p1 = (info *)malloc(BOK);printf(请输入图书数据:n);printf(请输入书籍编号: );scanf(%s, p1- bookNum);printf(请输入书名: );scanf(%s, p1- bookNam);printf(请输入作者: );scanf(%s, p1- bookAut);printf(请输入书籍价格: );scanf(%f, &p1- bookPri);printf(请输入存储状态: );scanf(%d, &p1- status);p2- next = NULL;fp = fopen(bookInfo.dat, wb+);p3 = Bhead;while (p3 != NULL)fwrite(p3, BOK, 1, fp);p3 = p3- next;fclose(fp);return Bhead;void stuDat(studentDat *Shead, char stuNumber) /学生状态信息 printf(你的个人账户信息如下: n);printf(n |账户 信息| n);printf( - -n);printf( | 姓名 | 学号 | 密码 | 借阅状态 | 权限 | n)for (Shead; Shead != NULL; Shead = Shead- next)if (strcmp(Shead- number, stuNumber) = 0)printf( | %s | %s | % s | %d | %c |, Shead- stuNam, Shead- number, Shead- passKey, Shead- borrowSta, Shead- key);if (Shead- borrowS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版临时工劳动合同履行与评价合同
- 二零二五版农村卫生户厕改造设计与施工合同
- 二零二五年度搬迁项目周边环境监测合同
- 2025版电商专用包装箱定制销售合同范本
- 二零二五年度教育信息化平台建设合同
- 二零二五版乙方特权仓储租赁协议打造绿色仓储空间
- 二零二五年度特色农业用地承包服务合同
- 2025版金融行业金融机构信息安全保密合同
- 2025年液体饲料罐车运输及市场拓展合同
- 二零二五年度工地施工安全文明施工承诺合同
- 实验室病原微生物危害评估报告(同名3479)
- 阿特拉斯·科普柯无油螺杆压缩机
- JJG 1000-2005电动水平振动试验台
- GB/T 4623-2014环形混凝土电杆
- 混床再生操作培训课件
- 《薄膜材料与薄膜技术》教学配套课件
- 静脉炎的预防及处理课件
- 概述SFBT(焦点解决短程治疗)课件
- ISO14001:2015环境管理体系内部审核管理评审合集
- 隧道开挖作业台车计算书
- 煤气作业安全技术实际操作考试标准
评论
0/150
提交评论