范文一:C语言编写图书管理系统
西安邮电学院计算机科学与技术学院
《C语言程序设计》课程设计
实验报告
题目: 图书管理系统
专业: 计算机软件工程
班级: 0901
姓名: 张 龙
成绩:
指导教师: 庞秀梅
完成日期: 2010年 9 月 9 日
目 录
第一章 系统功能模块结构图………………………………………………….3 1.1 系统调用的函数……………………………… …………………..3 1.2 图书管理系统模块……………………………… ………………..3 1.3 管理系统数据流图……………………………… ……………… .4 1.4 系统主菜单……………………………… ……………………..5 1.5 图书查询……………………………… ……………………..5 1.6 借阅图书……………………………… … …………………..5 1.7 管理系统……………………………… …………………… ..5 1.8 还书……………………………… ………………………….6 1.9 退出系统……………………………… ……………………..6 第二章 图书管理系统的结构………………………………………………….6 2.1 主函数流程图……………………………… ………………..6 2.2 程序文件存储设计……………………………… ………………..7 第三章 图书管理系统测试………………………………………… ………..7 3(1 实验结果……………………………………… ……………………………7 第四章 实验体会………………………………………………….……………7 4.1 体会与总结……………………………… ……………………..7 参考文献……………………………… ………………………………………………….8 附录: 源代码…………………… …………………………………………………………8
2
1系统功能模块结构图
本图书管理系统由查阅图书(chabook),借阅图书(lenbook),系统管理(图书管理,
借书卡管理),还书(huanbook)。四个大的菜单模块组成,其总体结构图如下:
图书管理系统主菜单
系还借查统书阅阅管系图图理统书书模模模模块块块块
图1图书管理系统总体结构图 1.1系统调用的函数
函数名称 函数功能
Chabook() 图书查阅模块函数
Lenbook() 图书借阅函数
Huanbook() 还书函数
Findbook() 按书名查找函数
Addbook() 增加图书函数
Delbook() 删除图书函数
Changebook() 修改图书函数
Bookcount() 图书统计函数
Addcar() 增加卡号函数
Delcar() 删除卡号函数
Lendcount() 借书统计函数
Carcount() 卡号统计函数
3
图2 系统调用函数表
1.2图书管理系统功能模块说明:
主菜单包括:查阅图书菜单,借阅图书,系统管理菜单,还书。 查阅图书菜单:包括按书名查找模块,返回。
系统管理菜单:包括图书管理,借书卡管理。
图书管理: 1.增加图书 2.删除图书 3.修改图书 4.图书统计 借书卡管理:1.申请新卡 2.删除卡号 3.借书统计 4.卡号统计
1.3图书管理系统的数据流图
按书名查找 返回 查阅图书
借阅图书 输入卡号和要借阅图书的名字
增加图书
删除图书 主 图书管理 修改图书 菜
图书统计 单
系统管理
申请新卡
删除卡号 借书卡管理
借书统计
卡号统计
还书完毕 输入卡号与书名 还书
退出系统
4
图3 图书管理系统数据流图
1.4 主菜单
直接运行程序,将进入主菜单Main Menu 然后按0-4键进入选择。
1.5 图书查询功能的实现
在主菜单中选择“1: 1.6 借阅图书功能的实现 在主菜单中选择“2: 1.7 管理系统 在主菜单中选择“3: 1.7.1 增加图书 在管理系统中选择“1:” ,然后输入书籍的序号,书名、作者、与借阅状态,即可完成添加图书操作。 1.7.2 删除图书 管理菜单中选择“2: 息,如果不存在系统不做任何改动。 1.7.3 修改图书资料 管理菜单中选择“3: 和作者即可完成修改图书操作。 1.7.4 书籍统计 选择“4: 1.7.5 (1)申请新卡: 在管理菜单中输入:“5: 然后选择“1: (2)删除卡号: 在“ (3)借书统计: 在“ 的信息。 (4)卡号统计: 在“ 5 1.8 还书 在主菜单中输入“4: 在主菜单中输入“0: 2程序结构 2.1 主函数流程图 程序开始 初始化、定义主菜单、分支菜单指针数组及变量 读键盘按键的键值 判断键值并弹出对应菜单 用户按了0键吗, Y N N 根据按键执行菜单选项对应的函数 从被调用函数中返回并转移 退出管理系统 6 图4 系统主函数流程图 2.2程序的文件存储设计 程序数据存取主要由三个文件:book.txt、record.txt、car.txt组成。 Book.txt :主要存储图书数据,程序的增加图书、删除图书、查阅图书等功能均是对些文件进行读取操作。 Record.txt :借书记录存储文件, 主要用来储存书籍的借出与归还信息。 Car.txt : 学生卡号储存文件。 另外在程序运行的时候还增加了一个临时文件book1.txt,它的主要功能是防止因为误操作对源文件book.txt的数据破坏。 3实验结果 程序基本达到设计要求,由于使用了菜单功能,程序的操作更加直观,一般情况下能正确提示错误信息。但是在测试中也发现软件的一些不足与缺陷,需要进一步修改和维护时予以纠正。总的来说,程序在TC2.0和Win-TC下通过测试。 4体会 刚开始面对这项任务时,自己就有点无信心,因为这项任务量太大了,而且自己的C语言学得不太好。但后来在老师的指导与同学的帮助与鼓励下,自己翻书本,上网查找和上机实践,逐步地完成了这项作业。 通过本次实验,不仅使我所学c语言的知识更加巩固,而且可以使理论与实践相结合,更好的掌握所学到的知识。在编写程序的时候我也发现了自己很多的不足之处,例如在课堂上学的理论知识有的时候很难把它应用到实际程序中,看似一个简单的功能模块往往需要很多知识的融合。在图书管理系统的编写过程中,我也更加的明白了程序刚开始设计时结构与算法的重要性。另外由于编写代码时的一个小失误,导致整个程序无法运行,结果后期花很多的时间去调试,在这里希望大家以此为戒,编写代码的时候一定要细心、谨慎。 7 5参考文献 [1] 吕凤翥等. C语言程序设计:基础理论与案例.清华大学出版社2005 [2] 曹衍龙等. C语言实例解析精粹.人民邮电出版社,2005 [3] 谭浩强.C语言程序设计(第二版).清华大学出版社,2002 6附录:源程序清单 /*华中科技大学,远程与继续教育学院06计算机系*/ /*图书管理系统,C语言编写*/ #include #include #include #include #include #define STACK_INIT_SIZE 10 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 struct student /*定义student结构,储存学生所借出的书籍信息*/ { int carnum; char lendbook[10]; }student[1000]; struct book /*定义书的类型*/ { int booknum; char bookname[10]; char bookcreat[10]; int turefalse; /*该变量为判断书籍是否借出*/ }book[1000]; struct car /*定义借书卡的数据类型*/ { int carnum; char studentname[10]; int studentclass; }car[100]; 8 main() /*????主菜单开始????*/ { char ch1,ch2,ch3,ch4,ch5; do { clrscr(); printf("**************Welcome to****************\n"); /*主菜单*/ printf("**************Main Menu**************\n"); printf(" 1: switch(ch1) { case '1':chabook();break; case '2':lendbook();;break; case '3':{ do { clrscr(); printf("**************** Welcome to Manager menu****************\n"); /*管理菜单*/ printf(" 1:\n"); /*添加图书*/ printf(" 2: printf(" 0: switch(ch2) { case '1':addbook(); break; case '2':delbook();break; case '3':changebook();break; case '4':bookcount();getch();break; case '5':{do { clrscr(); printf("****************jie shu ka guan li system****************\n"); /*借书卡管理菜 9 单*/ printf(" 1: printf("Please input :0--4 \n"); /*请输入0-4,其它错误*/ scanf("%s",&ch4); switch(ch4) { case '1':addcar();break; case '2':delcar();break; case '3':lendcount();break; case '4':carcount();break; case '0':break; default:printf("Error\n");getch();break; } }while(ch4!='0');}break; case '0':break; default:printf("Error\n");getch();break; } }while(ch2!='0');}break; case '4':huanbook();break; case '0':break; default:printf("Error\n");getch();break; } }while(ch1!='0'); } chabook() /*????查询图书????*/ { char ch5; do { printf("****************Welcome to book Search System ****************\n"); /*欢迎进 入图书查询系统*/ printf(" 1: switch(ch5) { case '1':findbook();getch();break; case '0':break; default:printf("Error\n");getch();break; } 10 }while(ch5!='0'); } findbook() /*????查找图书????*/ { FILE *fp; char bookname[10]; int ture,i; fp=fopen("book.txt","r"); printf("Please input ni yao cha zhao de shu ming\n"); /*请输入你要查找的书名*/ scanf("%s",bookname); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(bookname,book[i].bookname)==0) { if(book[i].turefalse==1) { printf("zhe ben shu de xiang xi zi liao shi :\n Num<%d>\tbookname<%s>\tzuo zhe<%s>\n ci shu xian zai wu ren jie yue\n",book[i].booknum,book[i].bookname,book[i].bookcreat); /*这本书的详细资料是———此书现在无人借阅*/ } else {printf("zhe ben shu yi you ren jie chu\n");fclose(fp);return;} /*这本书已有人借出*/ fclose(fp); return; } } printf("Sorry mei you ni yao cha xun de shu ji\n"); /*没有你要查询的书籍*/ fclose(fp); return; } lendbook() /*????借阅图书????*/ { FILE *fp,*fp2; int i,n; int carnum; printf("Plase input your carhao\n"); /*请输入你的卡号*/ scanf("%d",&carnum); fp=fopen("car.txt","r"); for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) 11 { if(car[i].carnum==carnum) { n=i; fclose(fp); printf("Please input books name\n"); /*请输入你要借阅的书的名字*/ scanf("%s",student[n].lendbook); fp=fopen("book.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(book[i].bookname,student[n].lendbook)==0) { if(book[i].turefalse==0) {printf("Sorry,gai shu yi bei jie chu!\n");fclose(fp);getch();return;} /* 对不起该书已被借出*/ else fclose(fp); fp=fopen("record.txt","a+"); student[n].carnum=carnum; fwrite(&student[n],sizeof(struct student),1,fp); fclose(fp); fp=fopen("book.txt","r"); fp2=fopen("bookl.txt","w"); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(book[i].bookname,student[n].lendbook)==0) { book[i].turefalse=0; fwrite(&book[i],sizeof(struct book),1,fp2); continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("bookl.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),1,fp); } fclose(fp); fclose(fp2); fopen("bookl.txt","w"); fclose(fp2); 12 printf("OK,Enter\n"); /*借书完毕,按任意键返回*/ getch(); return; } } printf("Sorry,mei you zhe ben shu \n"); /*对不起,没有这本书*/ fclose(fp); getch(); return; } } printf("Error,mei you gai ka,please shen qing xin ka\n"); /*无此卡号,请申请新卡*/ fclose(fp); getch(); } huanbook() /*????还书函数????*/ { FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止 数据遭破坏*/ int i,n; int carnum; char lendbook[10]; printf("Please input your carhao\n"); /*请输入你的卡号*/ scanf("%d",&carnum); fp=fopen("car.txt","r"); /*读取卡号记录*/ for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) /*用For循环语句判断卡号是否存在*/ { if(car[i].carnum==carnum) { n=i; fclose(fp); printf("Please input your name to the book also\n"); /*请输入你要还的书的名字*/ scanf("%s",lendbook); fp=fopen("record.txt","r"); for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判断是否借阅了输入的书*/ { if(strcmp(student[i].lendbook,lendbook)==0) /*借阅了该书,进入下一循环,否则出错显 示*/ { fclose(fp); fp=fopen("record.txt","r"); fp2=fopen("bookl.txt","w"); for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) 13 { if(strcmp(student[i].lendbook,lendbook)==0) { continue; /*删除还掉的书的借书记录*/ } fwrite(&student[i],sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/ } fclose(fp); fclose(fp2); fp=fopen("record.txt","w"); fp2=fopen("bookl.txt","r"); for(i=0;fread(&student[i],sizeof(struct student),1,fp2)!=0;i++) { fwrite(&student[i],sizeof(struct student),1,fp); /*将借书记录信息写回*/ } fclose(fp); fclose(fp2); fopen("bookl.txt","w"); /*清临时文件的记录*/ fclose(fp2); fp=fopen("book.txt","r"); fp2=fopen("bookl.txt","w"); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/ { if(i==n) { book[i].turefalse=1; fwrite(&book[i],sizeof(struct book),1,fp2); /*将还的书的原来状态设为无人借阅的*/ continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("bookl.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),1,fp); /*将临时文件写回*/ } fclose(fp); fclose(fp2); fopen("bookl.txt","w"); /*清临时文件*/ 14 fclose(fp2); printf("huan book ok!Enter\n"); /*还书完毕,任意键返回*/ getch(); return; } } printf("sorry,ni mei you jie chu gai shu\n"); /*Sorry你没有借出该书*/ fclose(fp); getch(); return; } } printf("mei you gai ka, please Enter\n"); /*没有该卡请重新输入*/ fclose(fp); getch(); } addbook() /*????添加图书????*/ { FILE *fp; int i=0; char choice='y'; fp=fopen("book.txt","a+"); while(choice=='y'||choice=='Y') { printf("Please input di %d ben book num\n",i+1); /*请输入第-本书 的序号*/ scanf("%d",&book[i].booknum); printf("Please input book name\n"); /*请输入书名*/ scanf("%s",book[i].bookname); printf("Please input book zuo zhe\n"); /*请输入书的作者*/ scanf("%s",book[i].bookcreat); printf("Please input 1 OR 0 ?\n1 dai biao shu hai mei bei ren jie\n 0 biao shi yi jing jie chu\n she qi ta zhi,cheng xu cuo wu\n"); /*请输入1或者0,1代表书还没被借,0表示已经借出*/ printf("Pleas she ding shu de zhuang tai\n"); /*请设定书的状态*/ scanf("%d",&book[i].turefalse); fwrite(&book[i],sizeof(struct book),1,fp); printf("Input next book? \n"); /*是否要输入下一本书*/ scanf("%s",&choice); } fclose(fp); } 15 delbook() /*????删除图书????*/ { FILE *fp,*fp2; int i; char bookname[10],choice; fp=fopen("book.txt","r"); fp2=fopen("bookl.txt","w"); printf("Please input yao shan chu de shu ming\n"); printf("ru guo ni shu ru de shu ming cun zai,xi tong zi dong shan chu gai xin xi~ru guo bu cun zai ,xi tong bu zuo ren he gai dong\n"); /*如果你输入的书名存在,系统自动删除该信息~如果不存在,系统不做任何改动*/ scanf("%s",bookname); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(bookname,book[i].bookname)!=0) { fwrite(&book[i],sizeof(struct book),1,fp2); } } fclose(fp); fclose(fp2); printf("Shi fou yao shan chu gai shu ji,Shan chu hou gai shu ji de suo you xin xi jiang wu fa hui fu《Y/N》\n"); /*是否要删除该书籍,删除后该书籍的所有信息将无法恢复*/ scanf("%s",&choice); if(choice=='y'||choice=='Y') { fp=fopen("book.txt","w"); fp2=fopen("bookl.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("bookl.txt","w"); fclose(fp2); printf("Enter\n"); getch(); return; } else 16 { printf("Enter\n"); getch(); return; } } changebook() /*????修改图书资料????*/ { FILE *fp,*fp2; char bookname[10],choice; int i; fp=fopen("book.txt","r"); fp2=fopen("bookl.txt","w"); printf("Please input yao xiu gai de shu de ming zi\n"); /*请输入要修改的书的名字*/ scanf("%s",bookname); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(book[i].bookname,bookname)==0) { printf("Ni suo yao xiu gai de shu de zi liao ru xia,Please xuan ze ni yao xiu gai de nei rong\n"); /*你所要修改的书的资料如下,请选择你要修改的内容*/ printf("NUM:〈%d〉 Bookname:〈%s〉 Zuo zhe:〈%s〉 \n",book[i].booknum,book[i].bookname,book[i].bookcreat); printf("1:Xiu gai book num\n"); /*修改书的序号*/ printf("2:Xiu gai book name\n"); /*修改书的名字*/ printf("3:Xiu gai zuo zhe\n"); /*修改书的作者*/ printf("Please input 1-3:"); scanf("%s",&choice); switch(choice) { case '1': { printf("Please input new num\n"); /*请输入新的序号*/ scanf("%d",&book[i].booknum); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '2': { printf("Please input new book name\n"); /*请输入新的书名*/ scanf("%s",book[i].bookname); fwrite(&book[i],sizeof(struct book),1,fp2); }break; 17 case '3': { printf("Please input new zuo zhe \n"); /*请输入新的作者*/ scanf("%s",book[i].bookcreat); fwrite(&book[i],sizeof(struct book),1,fp2); }break; defaut:printf("Error");break; } continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("bookl.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) { fwrite(&book[i],sizeof(struct book),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("bookl.txt","w"); fclose(fp2); printf("Enter\n"); getchar(); return; } bookcount() /*????图书统计????*/ { FILE *fp; int i,n=0; fp=fopen("book.txt","r"); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(book[i].booknum!=0&&strlen(book[i].bookname)!=0&&strlen(book[i].bookcreat)!=0) { printf("Di %d ben shu n=n+1; } 18 } fclose(fp); printf("Mu qian gong you %d ben shu\n",n); /*目前共有--本书*/ printf("Enter\n"); } addcar() /*????申请新卡????*/ { FILE *fp; int i=0; fp=fopen("car.txt","a+"); printf("please input ka hao\n"); /*请输入卡号*/ scanf("%d",&car[i].carnum); printf("please input student name\n"); /*请输入学生姓名*/ scanf("%s",car[i].studentname); printf("please input class\n"); /*请输入班级*/ scanf("%d",&car[i].studentclass); fwrite(&car[i],sizeof(struct car),1,fp); fclose(fp); printf("input OK ,Enter\n"); /*输入完毕,任意键返回*/ getch(); } delcar() { FILE *fp,*fp2; int i; int carnum; char choice; fp=fopen("car.txt","r"); fp2=fopen("bookl.txt","w"); printf("Plese input your ka hao\n"); /*请输入你的卡号*/ printf("ru guo shu ru de ka hao cun zai,system jiang zi dong shan chu gai xin xi~fou ze ,system bu zuo ren he gai dong!\n"); /*如果输入的卡号存在,系统将自动删除该信息。否则,系统不做任何改动~*/ scanf("%d",&carnum); for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) { if(car[i].carnum!=carnum) { fwrite(&car[i],sizeof(struct car),1,fp2); } 19 } fclose(fp); fclose(fp2); printf("zhen de yao shan chu gai ka ma,shan chu hou gai shu ji de suo you xin xi jiang wu fa hui fu《Y/N》\n"); /*真的要删除该卡吗,删除后该书籍的所有信息将无法恢复*/ scanf("%s",&choice); if(choice=='y'||choice=='Y') { fp=fopen("car.txt","w"); fp2=fopen("bookl.txt","r"); for(i=0;fread(&car[i],sizeof(struct car),1,fp2)!=0;i++) { fwrite(&car[i],sizeof(struct car),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("bookl.txt","w"); fclose(fp2); printf("Enter\n"); getch(); return; } else { printf("Enter\n"); getch(); return; } } lendcount() /*????借书统计????*/ { FILE *fp; int i,n=0; fp=fopen("record.txt","r"); for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) { printf("ka hao:%d jie chu de books :%s \n",student[i].carnum,student[i].lendbook); n=n+1; } fclose(fp); printf("There are now %dbook lending \n",n); /*目前借出的书籍*/ 20 printf("Enter\n"); getch(); } carcount() /*????卡号统计????*/ { FILE *fp; int i,n=0; fp=fopen("car.txt","r"); for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) { printf("di %d zhang ka class:%d>\n",i+1,car[i].carnum,car[i].studentname,car[i].studentclass); n=n+1; } fclose(fp); printf("gong you %d ben shu\n",n); /*目前共有多少本书*/ printf("Enter\n"); /*返回*/ getch(); } 21 分 类 号:单位代码: 本 科 毕 业 设 计 说 明 书 C 语言编写图书管理系统 姓 名 李 彬 学 号 200815840114 年 级 2008级本科 3班 专 业 机械设计制造及其自动化 系 (院) 机械工程学院 指导教师 李培珍 年 月 日 目 录 第一部分 . ................................................................. 1 职业生涯规划——十年创业路 . ............................................... 1 1前 言 ................................................................... 1 2自我剖析 ................................................................ 1 3环境分析 ................................................................ 1 3.1国家环境 . ............................................................ 1 3.2社会环境 . ............................................................ 1 3.3职业环境 . ............................................................ 2 3.4分析小结 . ............................................................ 2 4未来人生职业规划 ........................................................ 2 5总 结 ................................................................... 2 第二部分 . ................................................................. 4 C 语言编写图书管理系统 .................................................... 4 摘 要 . ................................................................... 4 Abstract . ................................................................. 5 1需求分析 ................................................................ 6 1.1 系统需求 ............................................................ 6 1.2 功能分析 ............................................................ 6 2系统功能模块结构图 ...................................................... 6 2.1 系统调用的函数 ...................................................... 7 2.2 图书管理系统模块 .................................................... 9 3 图书管理系统的结构 . .................................................... 10 3.1 主函数流程图 ....................................................... 10 3.1.1主控模块 ................................................................................................................................. 10 3.1.2读者登陆模块 . ....................................................................................................................... 11 3.1.3管理员登陆模块 ................................................................................................................... 12 3.1.4图书管理模块 . ....................................................................................................................... 13 3.1.5读者管理模块 . ....................................................................................................................... 14 3.2 实体数据结构 ....................................................... 15 3.2.1读者类别结构 . ....................................................................................................................... 15 3.2.2读者信息结构 . ....................................................................................................................... 15 3.2.3图书类别结构 . ....................................................................................................................... 16 临 沂 大 学 2012届 本 科 毕 业 设 计 说 明 书 3.2.4图书数据结构 . ....................................................................................................................... 16 3.2.5管理员类别结构 ................................................................................................................... 17 3.2.6管理员数据结构 ................................................................................................................... 17 3.2.7借阅信息结构 . ....................................................................................................................... 18 3.2.8违规记录数据结构 . .............................................................................................................. 18 3.3 程序文件存储设计 ................................................... 19 3.3.1链表存储结构简述 . .............................................................................................................. 19 3.3.2动态链表的建立 ................................................................................................................... 19 3.3.3动态链表的删除 ................................................................................................................... 21 3.3.4动态链表的插入 ................................................................................................................... 23 3.3.5数据文件存储 . ....................................................................................................................... 24 4 图书管理系统测试 . ...................................................... 25 4.1 测试过程 ........................................................... 25 4.2 实验结果 ........................................................... 25 4.3 系统缺陷 ........................................................... 25 5出错处理 ............................................................... 25 5.1 出错输出信息 ....................................................... 25 5.2 出错处理对策 ....................................................... 25 6安全设计 ............................................................... 25 7 设计心得 . .............................................................. 26 参 考 文 献 . ............................................................. 27 附 录 . .................................................................. 27 第一部分 职业生涯规划——十年创业路 1前 言 在今天这个人才竞争的时代,职业生涯规划开始成为在人争夺战中的另一重要利 器。对企业而言,如何体现公司“以人为本”的人才理念,关注员工的人才理念,关注 员工的持续成长,职业生涯规划是一种有效的手段;而对每个人而言,职业生命是有限 的,如果不进行有效的规划,势必会造成生命和时间的浪费。作为当代大学生,若是带 着一脸茫然,踏入这个拥挤的社会怎能满足社会的需要,使自己占有一席之地?因此, 我试着为自己拟定一份职业生涯规划,将自己的未来好好的设计一下。有了目标,才会 有动力。 2自我剖析 优点:做事仔细认真、踏实、有耐心、肯吃苦耐劳。 为人和蔼、友善、安分、忠 实可靠、很好相处而且能以一种 实事求是的态度接受他人的行为,但我需要基本的信 任和理解。总是避免矛盾,更在意维护人际关系。只要可能,就会使自己适应他人的需 要和期望。 缺点:性格偏内向, 不太善于表达自己, 语言表达还很欠缺。 交际能力较差, 胆小, 思想上属保守派,积极主动性不够。有时偷懒,知识面不广,经验不足。缺乏毅力、恒 心有时多愁善感。 兴趣爱好:1.cad 、 PRO/E绘图。 2. 看书。 3. 编程。 4. 听音乐。 3环境分析 3.1国家环境 机械自动化技术从上个世纪 2O 年代开始发展应用以来,已经得到了迅速的发展,特 别是近年来计算机的高度集成化,开始采用了计算机集成制造系统,大大加快了机械自 动化的发展,但我国仍处于初级操作阶段的自动化。我国机械制造业目前有 1 1. 4万个 企业,发展很不平衡,有大量落后于现代水准的产业,大部分企业还比较落后,手工劳 动占有相当的比重,我国能独立开发现代机械自动化技术的企业可以说没有;我国机械 制造业企业中自动化装备少、水准低,不仅在数量上同世界先进国家有较大差距,而且 在品种上、质量上、使用上,同世界先进水准也存在阶段性差距。实现我国机械自动化 技术是一个长期的过程,不可能一蹴而就,需要循序渐进,不断努力,创造条件,向自 动化的高级理想阶段迈进。 3.2社会环境 国产造型生产线因产品质量差、 可靠性低、 实用性差, 开工率一般仅在 50%~60%。 而能在生产中长期服役的主力生产线很少,像第一汽车制造厂的 01线、第二汽车制造厂 的 BMD 线等具有全年开工业绩的线更是风毛麟角。这种现象不属偶然或局部,而是带有 普遍性。据调查,我国引进的弧焊机器人,完全正常运转、充分发挥效益的只占 1/3, 另外 1/3处于负荷不满或不能完全正常运转状态:还有 1/3不能正常使用,直接影响了 用户使用更多机器人的信心。所以,我国现在需要自动化控制方面的人才,以提高利用 率、生产率。 3.3职业环境 由于大力发展工业自动化是加快传统产业改造提升、提高企业整体素质、提高国家 整体国力、调整工业结构、迅速搞活大中型企业的有效途径和手段,国家将继续通过实 施一系列工业过程自动化高技术产业化专项,用信息化带动工业化,推动工业自动化技 术的进一步发展,加强技术创新,实现产业化,解决国民经济发展面临的深层问题,进 一步提高国民经济整体素质和综合国力,实现跨越式发展。此时很多企业都需要自动化 控制方面的人才。 3.4分析小结 前景是乐观的,但是经济的发展和全球化的到来必将导致人才精英化,这就需要我 更加努力学习与专业相关的拓展知识,完善自己,让自己更容易融入社会,融入工作。 4未来人生职业规划 技术学习期:对于我们刚毕业的大学生来说, 最缺乏的应该就是动手操作的能力了, 也就是技术!所以,毕业后先学一门技术在这个高速发展的社会里是刻不容缓的。我需 要三年的时间去学习一门技术,这不仅会是为了未来的生活,我还必须根据自己的知识 去完善它,让它成为我自己的技术。 经验累积期:在这个时期,我已经可以独立工作,并且还要多学习经验,多与同行 师傅学习。 并且要学习企业管理, 为以后的创业打下坚实的基础。 这个时期我定为五年。 自主创业期:在这个时期,我已经学习到了技术,积累了经验,有了广阔的人际关 系和丰富的管理知识。我需要的是拼搏。在未来的两年,我会用我积攒的知识、技术、 资金和人脉组成一个二十人左右的团队,走上我的创业路。创业的路一定是艰辛的,一 定会遇到各种各样的问题,我会在接下来的两年里不断改善我的团队,发展她?? 5总 结 通过规划,我清楚地认识了自己,确立了自己的努力方向和职业定位,这样就可以 使自己保持平稳和正常的心态,按照目标和理想有条不紊、循序渐进地努力。当然,计 划虽好,最重要的还是在于其具体的实践和所取得的成效。任何目标,只说不做到头来 都会是一场空。然而现实是未知多变的,定出的计划随时都会遭遇问题,这就要求我们 有清醒的头脑,客观的分析和全面的认知。每个人都有自己的理想信念,抱负和追求, 每个人都渴望成功,但在此过程中我们必须坚持信念,必须持之以恒,必须脚踏实 第二部分 C 语言编写图书管理系统 摘 要 论文主要讲述的是用 C 语言编写图书管理系统。在本次设计中,先是对系 统的需求进行分析, 得到了图书管理系统所需要的基本功能。 再进行了模块化的 分组, 将图书管理系统所需要的功能细分为多个模块进行各模块的开发。 继而对 各功能菜单和流程进行设计。 数据结构是这个系统最重要的部分之一, 因为它承 担着整个系统数据存储的重担。 而图书管理系统的数据时非常多的。 最后进行系 统测试和调试。 关键词:C 语言;图书管理系统;需求;模块;结构;流程;数据测试 Abstract The paper is talking about written a Books Management System in C programming language. In this design, I get the system requirements first and I know what function is the Books Management System need. Secondly, I divide the Books Management System into severy modules and development each module. And then designs each function menu and process. The data structure of this system is one of the most important parts, because it bear the burden of the whole system data storage. And the data of the books management system is so much. Finally, testing and debugging The Books Management System. Keywords:C programming language; Books Management System; Requirement; Module; Structure; Process; Data testing; 1需求分析 1.1 系统需求 为了方便读者查找自己需要的书籍及图书馆人员的管理, 需要对书籍进行必 要的分类处理, 这样既方便管理人员对图书的管理, 也方便读者的借阅, 使图书 管理井然有序。 1.2 功能分析 图书分类管理:为了便于不同书籍的管理, 图书可分为不同的类别, 用于编 辑不同的权限,设置不同的管理方式。 读者分类管理:为了读者管理方便,可以将读者分为不同的类别,定义不同 的属性,灵活的管理读者信息。 管理员分类管理:为了便于对管理员的管理,管理员可分为多种类别,并且 可以编辑,各级管理员权限亦不同,实现管理员对图书管理系统的管理。 图书查询:设定多种搜索条件,按条件搜索符合读者要求的图书。如果读者 知道某本书的书名、作者等相关信息,利用图书搜索功能就很方便了。 权限管理:权限管理包括两部分内容:对读者帐号的管理和对书籍信息的管 理。管理员需要给用户分配用户名和密码,同时设定用户的类别。同时,管理员 还需要给书籍规定类别,用以图书和读者的管理。 违规管理:用以管理图书借阅超期的读者,违规读者在得到相应处罚后才能 继续借阅图书。 2系统功能模块结构图 本图书管理系统由图书管理,读者管理 , 图书借阅,管理员管理四个大的菜 单模块组成,其总体结构图如下: 图 1图书管理系统总体结构图 2.1 系统调用的函数 图 2系统调用的函数图 2.2 图书管理系统模块 主菜单包括:读者登陆,管理员登陆,图书查询,退出。 读者登陆:图书借阅,已借图书,借阅历史,违规记录,退出。 管理员登陆:图书查询,图书管理,读者管理,违规处理,返回上层,退出。 图书查询:根据图书名称查询图书。 退出:退出图书管理系统。 图 3图书管理系统模块 主菜单 读者登陆 管理员登陆 图书查询 退出 图书借阅 退出 违规记录 借阅历史 已借图书 图书查询 退出 违规处理 读者管理 图书管理 添加图书 返回 删除类别 添加类别 删除图书 添加读者 删除读者 返回 删除类别 添加类别 3 图书管理系统的结构 3.1 主函数流程图 3.1.1主控模块 在该模块中, 提供系统主菜单, 通过主菜单用户选择读者登陆、 管理员登陆、 图书查询和退出。 图 4主控模块流程图 在该模块中,提供子菜单供用户选择图书查询,已借书目,借阅历史,违规 记录和退出。查询函数直接调用借阅函数借阅图书。已借书目查询未归还图书。 借阅历史查询已还图书。违规记录查询超期未还图书。 图 5读者登陆模块流程图 在该模块中, 提供子菜单供用户选择图书查询,图书管理, 读者管理,违规 记录, 返回上层和退出。 查询菜单调用图书查询函数查询图书。 图书馆里调用图 书管理菜单, 对图书管理进行各种操作。 读者管理调用读者管理菜单, 对读者进 行各种操作。 违规记录调用违规记录处理函数, 对读者超期的图书进行管理。 返 回上一层为保持管理员的登陆状态, 以便读者借阅图书。 退出为管理员退出登陆, 此状态下读者不可借阅图书。 图 6管理员登陆模块流程图 在该菜单中供用户选择添加图书,删除图书,添加类别,删除类别和返回。 添加图书调用添加图书函数。 删除图书调用图书删除函数。 添加类别调用添加类 别函数。 删除类别调用类别删除函数。 返回为退出图书图书管理菜单, 并返回上 层菜单。 图 7图书管理模块流程图 3.1.5读者管理模块 在该菜单中供用户选择添加读者,删除读者,添加类别,删除类别和返回。 添加读者调用读者添加函数。 删除读者调用读者删除函数。 添加类别调用读者类 别添加函数, 删除类别调用读者类别删除函数。 返回为退出读者管理菜单, 并返 回上一层。 图 8读者管理模块流程图 3.2 实体数据结构 3.2.1读者类别结构 图 9读者类别结构图 3.2.2读者信息结构 图 10读者信息结构图 图 11图书类别结构图 3.2.4图书数据结构 图 12图书信息结构图 图 13管理员类别结构图 3.2.6管理员数据结构 图 14管理员数据结构图 3.2.7借阅信息结构 图 15借阅信息结构图 3.2.8违规记录数据结构 图 16违规记录结构图 3.3 程序文件存储设计 程序数据采用链表结构。 链表是一种常见的重要的数据结构。 它是动态地进 行存储分配的一种结构。 用数组存储数据时, 必须事先定义固定的长度 (即元素 个数) 。如果事先难以确定元素个数,则必须把数组定义的足够大,以便能存放 任意数目的数据, 显然这将会浪费内存。 链表则没有这种缺点, 它根据需要开辟 内存单元。所以本程序选用链表结构存储数据。 3.3.1链表存储结构简述 head 1249 1356 1475 1021 图 17链表示意图 链表有一个“头指针”变量,图中 head 表示,它存放一个地址,该地址指 向一个元素。链表中每一个元素成为“结点” ,每个结点都应包括两个部分;用 户需要用的实际数据和下一个结点的地址。 head 指向第一个元素;第一个元素 又指向第二个元素??直到最后一个元素, 该元素不再指向其它元素, 它称为 “表 尾” ,它的地址部分放一个“ NULL ” (表示“空地址” ) ,链表到此结束。 链表中各个元素在内存中可以不是连续存放的。 要找某一元素, 必须先找到 上一个元素, 根据它提供的下一元素地址才能找到下一元素。 如果不提供 “头指 针” (head ) ,则整个链表都无法访问。由此可见,头指针在链表中得重要性。由 此, 本程序中头指针都列为全局变量, 可供各个文件中函数调用, 保证数据的流 通。同时,头指针也不直接应用,而是传递给同类型指针后再应用,用以保证头 指针不被随意修改,保证程序的稳定性。 3.3.2动态链表的建立 建立动态链表是指在程序执行过程中从无到有地建立起一个链表, 即一个一 个地开辟结点和输入各结点数据,并建立起前后相连的关系。 head p1 (b) head p1 (c) P1 (d) (e) (f) 图 18链表建立示意图 当输入第一个结点数据时,令 head=p1 ,即把 p1的值赋给 head ,也就是使 head 也指向新开辟的结点(图 18a ) 。 p1所指向的新开辟的结点就成为链表中第 一个结点。然后再开辟另一个结点并使 p1指向它,接着输入该结点的数据(图 18b ) 。当链入第二个结点时,将 p1的值赋给 p2->next,此时 p2指向第一个结 点,因此执行“ p2->next=p1”就将新结点的地址赋给第一个结点的 next 成员, 使第一个结点的 next 成员指向第二个结点(图 18c ) 。接着使 p2=p1,也就是使 p2指向刚才建立的结点 (图 18d ) 。 接着再开辟一个结点并使 p1指向它, 并输入 该结点的数据(图 18e ) 。再次循环建立结点,又将 p1的值赋给 p2->next,也就 是将第 3个结点连接到第 2个结点之后,并使 p2=p1,使 p2指向最后一个结点 (图 18f ) 。 在结束结点建立时, 最后一个结点 next 成员应被赋给 NULL , 它不指 向任何结点。 3.3.3动态链表的删除 动态链表的删除指删除链表中得某一个结点。 即查找到要删除的结点后删除 此结点,再将其余链表连接。 (a ) (b ) 图 19 与此相仿, 从一个动态链表中删去一个结点, 并不是真正从内存中把它抹掉, 而是把它从链表中分离开来,只要撤销原来的连接关系即可。 (a ) (b) (c) (d) 图 20动态链表删除示意图 设两个指针变量 p1和 p2,先使 p1指向第一个结点(图 20a ) 。如果要删除 的不是第一个结点,则使 p1后移指向下一个结点(将 p1->next赋给 p1) ,在此 之前应将 p1的值赋给 p2,是 p2指向刚才检查过的那个结点(图 20b ) 。如此一 次一次地使 p1后移,直到找到所要删除的结点或检查完全部链表都找不到要删 除的结点为止。 如果找到某一结点是要删除的结点, 还要区分两种情况:①要删 除的是第一个结点(p1的值等于 head 的值,如图 20a 那样) ,则应将 p1->next赋给 head (图 20c ) 。 这时 head 指向原来的第二个结点。 第一个结点虽然仍存在, 但它已与链表脱离,因为链表中没有一个结点或头指针指向它。虽然 p1还指向 它, 它仍指向第二个结点, 但仍无济于事, 现在链表的第一个结点是原来的第二 个结点,原来第一个结点已“丢失” ,即不再是链表中得一部分了。②如果要删 除的不是第一个结点,则将 p1->next赋给 p2->next(图 20d) 。 p2->next原来指 向 p1指向的结点 (图中第二个结点) , 现在 p2->next改为指向 p1->next所指向 的结点(图中第三个结点) 。 P1所指向的结点不再是链表的一部分。 还要烤炉链表是空表(无结点)和链表中找不到要删除的结点的情况。 3.3.4动态链表的插入 对链表的插入是指将一个结点插入到一个已有的链表中。 根据插入的位置不同, 可分为三种插入方式:①插在链表开头。 ②插在链表 结尾。③插在链表中间。 (a ) 图 21动态链表插入示意图 由于在本程序中只用到第一种插入方式, 所以此处只对第一种插入方式进行 讲解。 先将指针变量 p0指向待插入结点, p1指向第一个结点,见图 21a 。插入位置为 第一个结点之前(即 p1等于 head ) ,将 p0赋给 head ,将 p1赋给 p0->next,见 图 21b 。 3.3.5数据文件存储 为了使用方便,容易理解和对文件直接访问,本程序用 fprintf 和 fscanf 函数对磁盘文件读写。这种存储方式在输入时要将 ASC Ⅱ码转换为二进制形式, 在输出是又要将二进制形式转换成字符,花费时间比较多。此处可以用 fread 和 fwrite 函数代替,但是为了更方便阅读文件,此处不做代替。 程 序 数 据 存 取 主 要 由 八 个 文 件 :Administers.dat 、 AdminType.dat 、 Books.dat 、 BookType.dat 、 Readers.dat 、 ReaderType.dat 、 BorrowInfo.dat 、 OutLine.dat 组成。 Administers.dat :用于存储管理员信息。程序的增加管理员、删除管理员 等功能均是对此文件进行读写操作。 AdminType.dat :用于存储管理员类别信息。程序的增加管理员类别、删除 管理员类别等功能均是对此文件的读写操作。 Books.dat :用于存储图书信息。程序的增加图书、删除图书等功能均是对 此文件的读写操作。 BookType.dat :用于存储图书类别。 程序的增加图书类别、 删除图书类别等 功能均是对此文件的读写操作。 Readers.dat :用于存储读者信息。程序的增加读者、删除读者等功能均是 对此文件的读写操作。 ReaderType.dat :用于存储读者类别。 程序的增加读者类别、 删除读者类别 等功能均是对此文件的读写操作。 BorrowInfo.dat :用于存储借阅信息。 程序的增加借阅信息、 修改借阅信息 等功能都是对此文件的读写操作。 OutLine.dat :用于存储违规记录。程序的增加违规记录、修改违规记录等 功能均是对此文件的读写操作。 4 图书管理系统测试 4.1 测试过程 测试过程中遇到了很多的错误,这点是由于自己基本功不扎实所造成的,出 错较多的原因有:① scanf 函数中网加取址符 &。②输入法全角半角转换。很多 符号用了全角符号。③链表建立时尾结点 next 成员没有赋值 NULL 。 4.2 实验结果 程序基本达到设计要求, 由于使用了菜单功能, 程序的操作更加直观, 一般 情况下能正确提示错误信息。 但是在测试中也发现软件的一些不足与缺陷, 需要 进一步修改和维护时予以纠正。在 C-free 下运行良好。 4.3 系统缺陷 目前测试已没有错误,但是经过长期使用,可能还会发现未知的错误。此系 统只是初步开发,还不够人性化,操作不够方便。 5出错处理 5.1 出错输出信息 根据不同的出错情况给出不同的出错信息。 如:输入密码不对是提示“密码错误,请重新输入” 。 5.2 出错处理对策 给用户提示信息,让用户重新输入。 6安全设计 为每个操作人员设置账号及口令,规定每一级操作人员的权限。 7 设计心得 通过对此系统的设计,我学会了很多东西,包括从系统开发的初衷、需求分 析到功能设计和编程。 同时我也体会到了自己的许多不足之处, 我的基本功还太 不扎实, 有很多的低级错误, 使得我耽误了很多的时间。 以后我会经常动手写一 些小程序以巩固自己。 另外我还会继续更改此系统, 改正其中的一些错误和不足, 使其更人性化,更易使用。 参 考 文 献 [1] 谭浩强 .C 语言设计第三版 . 清华大学出版社 .2005 [2] 康莉、李宽 . 零基础学 C 语言 . 机械工业出版社 .2009 [3] Al Kelley、 Ira Pohl.C语言教程 . 机械工业出版社 .2007 [4] 苏剑 . 标准 C++编程宝典 . 电子工业出版社 .2005 [5] 杨友东 .Visual C++程序设计全程指南 . 电子工业出版社 .2009 附 录 附 C 语言编写图书管理系统 .rar C 程 序 专 周 报 告 2011/05/30-2011/06/03 辅导老师 :王飞 图书信息管理系统程序设计报告 一、程序名称 :图书信息管理系统。 二、设计内容 :通过近一个学期的 C 语言学习,编写一个小程序,以实现对图书 的管理。用各种语句、结构体等,实现图书的输入、输出、修改等多种功能。 三、设计目的:1、系统地对图书进行管理,便于图书管理人员管理。 四、设计流程 : 五、设计要求 : :1、系统以菜单方式工作。 2、进入系统需要用户名和密码。 3、有图书信息录入功能。 4、有图书信息浏览功能。 5、有图书信息查询功能。 6、有图书借阅次数排序功能。 7、有图书信息的删除和修改功能。 8、系统推出。 六、软件使用 :编写该程序使用的是 Microsoft Visual C++。 七、心得体会 :通过此次编写图书信息管理系统程序,我学到了很多。也感触到 了很多。 “书上得来终觉浅,要知此事需躬行。 ”是呀!在没亲身动手去编写程 序时,我总觉得我会了。书本上的我都懂了。可我真的懂了吗?答案是否定的。 在编写过程中,会出现很多的问题,而这些问题你是在书本上是接触不到的。 只有发现问题,解决问题,你才会有提高。有谁敢说我对 C 语言没有一点问题。 没有,就连老师也不敢说这样的大话。我是打算报考计算机二级的,通过此次 编程我看清了我在这方面的水平,那就是,我现在的水平是远远达不到二级的。 但这只是暂时的,下一阶段我会更加努力学习,我相信我会学好这们语言的。 附录 1:参考文献 1、 C 程序教程教程。 (主编:孙淑霞 ) 2、 C 实验与考级题训精解。 (主编:戴彦群 于春 ) 3、 C 程序设计。 (主编:谭浩强 ) 附录 2:程序清单 #include #include #include #include struct books { char name[10]; char no[10]; char writer[10]; char sno[20]; char price[20]; }con[50]; int k=0; void enter(); void ent(); void display(); void update(); void del(); void save(); void read(); int menu(); /********************************主函数 ***************************************/ void main() { int c; while(1) { printf( \n\n\n\n printf( printf( 2011-6-1 printf( scanf( switch(c) { case 1: ent(); break; case 0: printf( exit(0); } } } /******************* 登陆函数,进行密码验证 *******************/ void ent() { char key[10],password[10]= int k=1; printf( while(k<> { if(strcmp(password,key)==0) { while(1) { int a; a=menu(); switch(a) { case 1:printf( case 2:printf( case 3:printf( case 4:printf( case 5:printf( case 6:printf( default:printf( } } else { k++; printf( scanf( if(k>2) { if(strcmp(password,key)==0) continue; else { printf( exit(0); } } } } } int menu() { int a ; printf( ******************************************************************\n printf( printf( ******************************************************************\n printf( printf( printf( printf( printf( printf( printf( ******************************************************************\n printf( scanf( return a; } /******************************输入图书信息 ***********************************/ void enter() { char ch[20]; printf( do { printf( scanf( printf( scanf( printf( scanf( printf( scanf( printf( scanf( k++; printf( scanf( }while(strcmp(ch, } /****************************显示图书信息 *************************************/ void display() { int i; read(); printf( for(i=0;i<> { printf( printf( } /*****************************查询与修改图书信息 ******************************/ void update() { int i; char a[20],ch[10]; printf( scanf( for(i=0;i<> if(strcmp(con[i].name,a)==0) printf( printf( scanf( if(strcmp(ch, { printf( scanf( for(i=0;i<> { if(strcmp(con[i].name,a)==0) { printf( scanf( if(strcmp(ch, printf( scanf( if(strcmp(ch, printf( scanf( if(strcmp(ch, printf( scanf( if(strcmp(ch, printf( scanf( if(strcmp(ch, } } } display(); } /**********************************删除图书信息 *******************************/ void del() { int i,j; char c[20]; printf( printf( scanf( for(i=0;i<> if(strcmp(c,con[i].name)==0) break; for(j=i;j<> con[j]=con[j+1]; printf( k--; display(); } /******************************文件写入数据 **********************************/ void save() { FILE *fp; int i; if((fp=fopen( { printf( exit(0); } for(i=0;i<> if(fwrite(&con[i],sizeof(struct books),1,fp)!=1) { printf( fclose(fp); exit(0); } printf( fclose(fp); } /***********************************文件读取数据 ******************************/ void read() { FILE *fp; int i; if((fp=fopen( { printf( exit(0); } for(i=0;i<> if(fread(&con[i],sizeof(struct books),1,fp)==1); else { printf( exit(0); } fclose(fp); return; } Java 编写的简单图书管理系统 主界面 代码实现 package Library; import java. awt . BorderLayout ; import java. awt . Color ; import java. awt . Container ; import java. awt . event . ActionEvent ; import java. awt . event . ActionListener ; import java. sql . Connection ; import java. sql . DriverManager ; import java. sql . ResultSet ; import java. sql . SQLException ; import java. sql . Statement ; import javax. swing . ImageIcon ; import javax. swing . JButton ; import javax. swing . JFrame ; import javax. swing . JLabel ; import javax. swing . JOptionPane ; import javax. swing . JPanel ; import javax. swing . JPasswordField ; import javax. swing . JTextField ; public class Login extends JFrame { private static final long serialVersionUID = 1L; private JLabel jlUsername ; private JLabel jlPwd ; private JTextField txtUsername ; //用户名 private JTextField txtPassword ; //密码 private JButton jbOk ; private JButton jbCancel ; public JLabel getJlUsername (){ if (jlUsername ==null ) { jlUsername =new JLabel ( jlUsername . setForeground (Color . BLACK ) ; jlUsername . setBounds (118, 40, 85, 30) ; } return jlUsername ; } public JLabel getJlPwd (){ if (jlPwd ==null ) { jlPwd =new JLabel ( jlPwd . setForeground (Color . BLACK ) ; jlPwd . setBounds (118, 100, 85, 30) ; } return jlPwd ; } public JTextField getTxtUsername (){ if (txtUsername ==null ) { txtUsername =new JTextField (20) ; txtUsername . setBounds (180, 40 , 200, 30) ; } return txtUsername ; } public JTextField getTxtPassword (){ if (txtPassword ==null ) { txtPassword =new JPasswordField (20) ; txtPassword . setBounds (180, 100, 200, 30) ; } return txtPassword ; } public JButton getJbOk (){ if (jbOk ==null ) { jbOk =new JButton ( jbOk . setBounds (150, 180, 90, 30) ; //jbOk.addActionListener(this); } return jbOk ; } public JButton getJbCancel (){ if (jbCancel ==null ) { jbCancel =new JButton ( jbCancel . setBounds (300, 180, 90, 30) ; } return jbCancel ; } public Login (String title ) { super (title ) ; //JFrame frame=new JFrame(); Container cantainer =this . getContentPane (); this . setDefaultCloseOperation (JFrame . EXIT_ON_CLOSE) ; ImageIcon img =new ImageIcon ( JLabel imgLabel =new JLabel (img ) ; //将背景图放在标签里。 this . getLayeredPane (). add (imgLabel , new Integer (Integer . MIN_VALUE)) ; //注意这里是关键,将背景标签添加到 的 LayeredPane 面板里。 imgLabel . setBounds (0, 0, img . getIconWidth (), img . getIconHeight ()); //设置背景标签的位置 cantainer . setLayout (new BorderLayout ()); imgLabel . setLayout (null ) ; imgLabel . add (getJlUsername ()); imgLabel . add (getTxtUsername ()); imgLabel . add (getJlPwd ()); imgLabel . add (getTxtPassword ()); imgLabel . add (getJbOk ()); imgLabel . add (getJbCancel ()); cantainer . add (imgLabel , BorderLayout . NORTH ) ; ((JPanel ) cantainer ) . setOpaque (false ) ; //注意这里,将内容面板设为 透明。这样 LayeredPane 面板中的背景才能显示出来。 this . setSize (img . getIconWidth (), img . getIconHeight ()); myEvent (); this . setVisible (true ) ; this . setResizable (true ) ; } private void myEvent (){ jbCancel . addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e ) { Login . this . dispose (); } }); jbOk . addActionListener (new ActionListener () { public void actionPerformed (ActionEvent e ) { Connection conn =null ; Statement stm =null ; ResultSet st =null ; try { Class . forName ( conn =DriverManager . getConnection ( stm =conn . createStatement (); String sql = st =stm . executeQuery (sql ) ; // st1=stm.executeQuery(sql1); if (st . next ()) { if (txtUsername . getText (). equals (st . getString ( { Login . this . setVisible (false ) ; new Book ( } else { JOptionPane . showMessageDialog (null , getTxtUsername (). setText ( getTxtPassword (). setText ( } } else { JOptionPane . showMessageDialog (null , getTxtUsername (). setText ( getTxtPassword (). setText ( } } catch (ClassNotFoundException e1) { e1. printStackTrace (); }catch (SQLException e2) { // TODO Auto-generated catch block e2. printStackTrace (); }finally { try { stm . close (); }catch (Exception e3) {} // 关闭 Connection try {conn . close (); }catch (Exception e4) {} } } }); } public static void main (String []args ) { new Login ( } } 管理界面 实现代码 package Library; import java. awt . BorderLayout ; import java. awt . Container ; import java. awt . event . ActionEvent ; import java. awt . event . ActionListener ; import java. sql . Connection ; import java. sql . DriverManager ; import java. sql . ResultSet ; import java. sql . SQLException ; import java. sql . Statement ; import javax. swing . ImageIcon ; import javax. swing . JButton ; import javax. swing . JFrame ; import javax. swing . JLabel ; import javax. swing . JPanel ; import javax. swing . JTable ; import javax. swing . JTextField ; public class Book extends JFrame { private JLabel lblId ; private JLabel lblBname ; private JLabel lblWname ; private JLabel lblCbs ; private JLabel lblnum1; private JLabel lblnum2; private JTextField bId ; //图书编号 private JTextField bname ; //书名 private JTextField wname ; //作者名 private JTextField cbs ; //出版社 private JTextField num1; //现存量 private JTextField num2; //库存量 private JButton jbDel ; private JTextField jDel ; private JButton jbAdd ; private JButton jbSearch ; private JButton jbUpdate ; private JTable table ; private JLabel jabel ; //输入要查找的书号 public JLabel getJabel (){ if (jabel ==null ) { jabel =new JLabel ( return jabel ; } public JButton getJbDel (){ if (jbDel ==null ) { jbDel =new JButton ( return jbDel ; } public JTextField getjDel (){ if (jDel ==null ) { jDel =new JTextField (20) ; jDel . setBounds (100, 350, 150, 30) ; return jDel ; } public JButton getJbAdd (){ if (jbAdd ==null ) { jbAdd =new JButton ( jbAdd . setBounds (100, 400, 60, 30) ; } return jbAdd ; } public JButton getJbSearch (){ if (jbSearch ==null ) { jbSearch =new JButton ( return jbSearch ; } public JButton getJbUpdate (){ if (jbUpdate ==null ) { jbUpdate =new JButton ( return jbUpdate ; } public JTable getTable (){ if (table ==null ) { table =new JTable (100, 6) ; table . setBounds (270, 50, 500, 600) ; } return table ; } public JLabel getLblId (){ if (lblId ==null ) { lblId =new JLabel ( } return lblId ; } public JLabel getLblBname (){ if (lblBname ==null ) { lblBname =new JLabel ( return lblBname ; } public JLabel getLblWname (){ if (lblWname ==null ) { lblWname =new JLabel ( return lblWname ; } public JLabel getLblnum1(){ if (lblnum1==null ) { lblnum1=new JLabel ( return lblnum1; } public JLabel getLblnum2(){ if (lblnum2==null ) { lblnum2=new JLabel ( return lblnum2; } public JTextField getbId (){ if (bId ==null ) { bId . setBounds (100, 50, 150, 30) ; } return bId ; } public JTextField getBname (){ if (bname ==null ) { bname =new JTextField (20) ; bname . setBounds (100, 100, 150, 30) ; } return bname ; } public JTextField getWname (){ if (wname ==null ) { wname =new JTextField (20) ; wname . setBounds (100, 150, 150, 30) ; } return wname ; } public JTextField getNum1(){ if (num1==null ) { num1=new JTextField (20) ; num1. setBounds (100, 200, 150, 30) ; } return num1; } public JTextField getNum2(){ if (num2==null ) { num2=new JTextField (20) ; num2. setBounds (100, 250, 150, 30) ; } return num2; } public JLabel getLblCbs (){ if (lblCbs ==null ) { lblCbs =new JLabel ( lblCbs . setBounds (50, 300, 50, 30) ; } return lblCbs ; } public JTextField getCbs (){ if (cbs ==null ) { cbs =new JTextField (20) ; cbs . setBounds (100, 300, 150, 30) ; } return cbs ; } public Book (String title ) { super (title ) ; //JFrame frame=new JFrame(); Container cantainer =this . getContentPane (); this . setDefaultCloseOperation (JFrame . EXIT_ON_CLOSE) ; ImageIcon img =new ImageIcon ( JLabel imgLabel =new JLabel (img ) ; //将背景图放在标签里。 this . getLayeredPane (). add (imgLabel , new Integer (Integer . MIN_VALUE)) ; //注意这里是关键,将背景标签添加到 的 LayeredPane 面板里。 imgLabel . setBounds (0, 0, img . getIconWidth (), img . getIconHeight ()); //设置背景标签的位置 cantainer . setLayout (new BorderLayout ()); imgLabel . setLayout (null ) ; imgLabel . add (getLblId ()); imgLabel . add (getbId ()); imgLabel . add (getLblBname ()); imgLabel . add (getBname ()); imgLabel . add (getLblWname ()); imgLabel . add (getWname ()); imgLabel . add (getLblnum1()); imgLabel . add (getNum1()); imgLabel . add (getLblnum2()); imgLabel . add (getNum2()); imgLabel . add (getLblCbs ()); imgLabel . add (getCbs ()); imgLabel . add (getTable ()); imgLabel . add (getJbDel ()); imgLabel . add (getjDel ()); imgLabel . add (getJbAdd ()); imgLabel . add (getJbSearch ()); imgLabel . add (getJbUpdate ()); imgLabel . add (getJabel ()); cantainer . add (imgLabel , BorderLayout . NORTH ) ; ((JPanel ) cantainer ) . setOpaque (false ) ; //注意这里,将内容面板设为 透明。这样 LayeredPane 面板中的背景才能显示出来。 this . setSize (img . getIconWidth (), img . getIconHeight ()); myEvent (); this . setVisible (true ) ; this . setResizable (true ) ; } private void myEvent (){ // TODO Auto-generated method stub jbAdd . addActionListener (new ActionListener () { public void actionPerformed (ActionEvent ee ) { Connection conn =null ; Statement stm =null ; String id1=bId . getText (); String name1=bname . getText (); String name2=wname . getText (); String n1=num1. getText (); String n2=num2. getText (); String chubs =cbs . getText (); try { Class . forName ( conn =DriverManager . getConnection ( stm =conn . createStatement (); String sql = stm . executeUpdate (sql ) ; getbId (). setText ( getBname (). setText ( getWname (). setText ( getNum1(). setText ( getNum2(). setText ( getCbs (). setText ( }catch (ClassNotFoundException e ) { }catch (SQLException e ) { // TODO Auto-generated catch block e . printStackTrace (); }finally {// 关闭 Statement try {stm . close (); }catch (Exception e ) {} // 关闭 Connection try {conn . close (); }catch (Exception e ) {} } } }); jbDel . addActionListener (new ActionListener () { public void actionPerformed (ActionEvent ee ) { String id =jDel . getText (); Connection conn =null ; Statement stm =null ; try { Class . forName ( conn =DriverManager . getConnection ( String sql = stm =conn . createStatement (); stm . executeUpdate (sql ) ; getjDel (). setText ( }catch (ClassNotFoundException e ) { }catch (SQLException e ) { // TODO Auto-generated catch block e . printStackTrace (); }finally {// 关闭 Statement }catch (Exception e ) {} // 关闭 Connection try {conn . close (); }catch (Exception e ) {} } } }); jbSearch . addActionListener (new ActionListener () { public void actionPerformed (ActionEvent ee ) { String id =jDel . getText (); Connection conn =null ; Statement stm =null ; ResultSet rst =null ; try { Class . forName ( conn =DriverManager . getConnection ( String sql = stm =conn . createStatement (); rst =stm . executeQuery (sql ) ; if (rst . next ()) { getbId (). setText (rst . getString ( getBname (). setText (rst . getString ( getWname (). setText (rst . getString ( getNum1(). setText (rst . getString ( getNum2(). setText (rst . getString ( getCbs (). setText (rst . getString ( getjDel (). setText ( } }catch (ClassNotFoundException e ) { }catch (SQLException e ) { // TODO Auto-generated catch block e . printStackTrace (); }finally {// 关闭 Statement }catch (Exception e ) {} // 关闭 Connection try {conn . close (); }catch (Exception e ) {} } } }); jbUpdate . addActionListener (new ActionListener () { public void actionPerformed (ActionEvent ee ) { String id1=bId . getText (); String name1=bname . getText (); String name2=wname . getText (); String n1=num1. getText (); String n2=num2. getText (); String chubs =cbs . getText (); Connection conn =null ; Statement stm =null ; try { Class . forName ( conn =DriverManager . getConnection ( String sql = stm =conn . createStatement (); stm . executeUpdate (sql ) ; }catch (ClassNotFoundException e ) { }catch (SQLException e ) { // TODO Auto-generated catch block e . printStackTrace (); }finally {// 关闭 Statement try {stm . close (); }catch (Exception e ) {} // 关闭 Connection try {conn . close (); }catch (Exception e ) {} } } }); } } 数据库: User Book 2012届 分 类 号: 单位代码: 本科毕业设计说明书 C语言编写图书管理系统 姓 名 李 彬 学 号 200815840114 年 级 2008级本科3班 专 业 机械设计制造及其自动化 系 (院) 机械工程学院 指导教师 李培珍 年 月 日 目 录 第一部分 .................................................................. 1 职业生涯规划——十年创业路 ................................................ 1 1前 言 ................................................................... 1 2自我剖析 ................................................................ 1 3环境分析 ................................................................ 1 3.1国家环境 ............................................................. 1 3.2社会环境 ............................................................. 1 3.3职业环境 ............................................................. 2 3.4分析小结 ............................................................. 2 4未来人生职业规划 ........................................................ 2 5总 结 ................................................................... 2 第二部分 .................................................................. 4 C语言编写图书管理系统 .................................................... 4 摘 要 .................................................................... 4 Abstract .................................................................. 5 1需求分析 ................................................................ 6 1.1 系统需求 ............................................................ 6 1.2 功能分析 ............................................................ 6 2系统功能模块结构图 ...................................................... 6 2.1 系统调用的函数 ...................................................... 7 2.2 图书管理系统模块 .................................................... 9 3 图书管理系统的结构 ..................................................... 10 3.1 主函数流程图 ....................................................... 10 3.1.1主控模块 ................................................................................................................................. 10 3.1.2读者登陆模块 ........................................................................................................................ 11 3.1.3管理员登陆模块 ................................................................................................................... 12 3.1.4图书管理模块 ........................................................................................................................ 13 3.1.5读者管理模块 ........................................................................................................................ 14 3.2 实体数据结构 ....................................................... 15 3.2.1读者类别结构 ........................................................................................................................ 15 3.2.2读者信息结构 ........................................................................................................................ 15 3.2.3图书类别结构 ........................................................................................................................ 16 I 临沂大学2012届本科毕业设计说明书 3.2.4图书数据结构 ........................................................................................................................ 16 3.2.5管理员类别结构 ................................................................................................................... 17 3.2.6管理员数据结构 ................................................................................................................... 17 3.2.7借阅信息结构 ........................................................................................................................ 18 3.2.8违规记录数据结构 ............................................................................................................... 18 3.3 程序文件存储设计 ................................................... 19 3.3.1链表存储结构简述 ............................................................................................................... 19 3.3.2动态链表的建立 ................................................................................................................... 19 3.3.3动态链表的删除 ................................................................................................................... 21 3.3.4动态链表的插入 ................................................................................................................... 23 3.3.5数据文件存储 ........................................................................................................................ 24 4 图书管理系统测试 ....................................................... 25 4.1 测试过程 ........................................................... 25 4.2 实验结果 ........................................................... 25 4.3 系统缺陷 ........................................................... 25 5出错处理 ............................................................... 25 5.1 出错输出信息 ....................................................... 25 5.2 出错处理对策 ....................................................... 25 6安全设计 ............................................................... 25 7 设计心得 ............................................................... 26 参 考 文 献 .............................................................. 27 附 录 ................................................................... 27 II 第一部分 职业生涯规划——十年创业路 1前 言 在今天这个人才竞争的时代,职业生涯规划开始成为在人争夺战中的另一重要利器。对企业而言,如何体现公司“以人为本”的人才理念,关注员工的人才理念,关注员工的持续成长,职业生涯规划是一种有效的手段;而对每个人而言,职业生命是有限的,如果不进行有效的规划,势必会造成生命和时间的浪费。作为当代大学生,若是带着一脸茫然,踏入这个拥挤的社会怎能满足社会的需要,使自己占有一席之地,因此,我试着为自己拟定一份职业生涯规划,将自己的未来好好的设计一下。有了目标,才会有动力。 2自我剖析 优点:做事仔细认真、踏实、有耐心、肯吃苦耐劳。 为人和蔼、友善、安分、忠实可靠、很好相处而且能以一种 实事求是的态度接受他人的行为,但我需要基本的信任和理解。总是避免矛盾,更在意维护人际关系。只要可能,就会使自己适应他人的需要和期望。 缺点:性格偏内向,不太善于表达自己,语言表达还很欠缺。交际能力较差,胆小,思想上属保守派,积极主动性不够。有时偷懒,知识面不广,经验不足。缺乏毅力、恒心有时多愁善感。 兴趣爱好:1.cad、PRO/E绘图。2.看书。3.编程。4.听音乐。 3环境分析 3.1国家环境 机械自动化技术从上个世纪2O年代开始发展应用以来,已经得到了迅速的发展,特别是近年来计算机的高度集成化,开始采用了计算机集成制造系统,大大加快了机械自动化的发展,但我国仍处于初级操作阶段的自动化。我国机械制造业目前有1 1(4万个企业,发展很不平衡,有大量落后于现代水准的产业,大部分企业还比较落后,手工劳动占有相当的比重,我国能独立开发现代机械自动化技术的企业可以说没有;我国机械制造业企业中自动化装备少、水准低,不仅在数量上同世界先进国家有较大差距,而且在品种上、质量上、使用上,同世界先进水准也存在阶段性差距。实现我国机械自动化技术是一个长期的过程,不可能一蹴而就,需要循序渐进,不断努力,创造条件,向自动化的高级理想阶段迈进。 3.2社会环境 1 国产造型生产线因产品质量差、可靠性低、实用性差,开工率一般仅在50,,60,。而能在生产中长期服役的主力生产线很少,像第一汽车制造厂的01线、第二汽车制造厂的BMD线等具有全年开工业绩的线更是风毛麟角。这种现象不属偶然或局部,而是带有普遍性。据调查,我国引进的弧焊机器人,完全正常运转、充分发挥效益的只占1,3,另外1,3处于负荷不满或不能完全正常运转状态:还有1,3不能正常使用,直接影响了用户使用更多机器人的信心。所以,我国现在需要自动化控制方面的人才,以提高利用率、生产率。 3.3职业环境 由于大力发展工业自动化是加快传统产业改造提升、提高企业整体素质、提高国家整体国力、调整工业结构、迅速搞活大中型企业的有效途径和手段,国家将继续通过实施一系列工业过程自动化高技术产业化专项,用信息化带动工业化,推动工业自动化技术的进一步发展,加强技术创新,实现产业化,解决国民经济发展面临的深层问题,进一步提高国民经济整体素质和综合国力,实现跨越式发展。此时很多企业都需要自动化控制方面的人才。 3.4分析小结 前景是乐观的,但是经济的发展和全球化的到来必将导致人才精英化,这就需要我更加努力学习与专业相关的拓展知识,完善自己,让自己更容易融入社会,融入工作。 4未来人生职业规划 技术学习期:对于我们刚毕业的大学生来说,最缺乏的应该就是动手操作的能力了,也就是技术~所以,毕业后先学一门技术在这个高速发展的社会里是刻不容缓的。我需要三年的时间去学习一门技术,这不仅会是为了未来的生活,我还必须根据自己的知识去完善它,让它成为我自己的技术。 经验累积期:在这个时期,我已经可以独立工作,并且还要多学习经验,多与同行师傅学习。并且要学习企业管理,为以后的创业打下坚实的基础。这个时期我定为五年。 自主创业期:在这个时期,我已经学习到了技术,积累了经验,有了广阔的人际关系和丰富的管理知识。我需要的是拼搏。在未来的两年,我会用我积攒的知识、技术、资金和人脉组成一个二十人左右的团队,走上我的创业路。创业的路一定是艰辛的,一定会遇到各种各样的问题,我会在接下来的两年里不断改善我的团队,发展她?? 5总 结 通过规划,我清楚地认识了自己,确立了自己的努力方向和职业定位,这样就可以使自己保持平稳和正常的心态,按照目标和理想有条不紊、循序渐进地努力。当然,计划虽好,最重要的还是在于其具体的实践和所取得的成效。任何目标,只说不做到头来 2 临沂大学2012届本科毕业设计说明书 都会是一场空。然而现实是未知多变的,定出的计划随时都会遭遇问题,这就要求我们有清醒的头脑,客观的分析和全面的认知。每个人都有自己的理想信念,抱负和追求,每个人都渴望成功,但在此过程中我们必须坚持信念,必须持之以恒,必须脚踏实 3 临沂大学2012届本科毕业设计说明书 第二部分 C语言编写图书管理系统 摘 要 论文主要讲述的是用C语言编写图书管理系统。在本次设计中,先是对系统的需求进行分析,得到了图书管理系统所需要的基本功能。再进行了模块化的分组,将图书管理系统所需要的功能细分为多个模块进行各模块的开发。继而对各功能菜单和流程进行设计。数据结构是这个系统最重要的部分之一,因为它承担着整个系统数据存储的重担。而图书管理系统的数据时非常多的。最后进行系统测试和调试。 关键词:C语言;图书管理系统;需求;模块;结构;流程;数据测试 4 临沂大学2012届本科毕业设计说明书 Abstract The paper is talking about written a Books Management System in C programming language. In this design, I get the system requirements first and I know hat function is the Books Management System need. Secondly, I divide the Books w Management System into severy modules and development each module. And then designs each function menu and process. The data structure of this system is one of the most important parts, because it bear the burden of the whole system data storage. And the data of the books management system is so much. Finally, testing and debugging The Books Management System. Keywords: C programming language; Books Management System; Requirement; Module; Structure; Process; Data testing; 5 临沂大学2012届本科毕业设计说明书 1需求分析 1.1 系统需求 为了方便读者查找自己需要的书籍及图书馆人员的管理,需要对书籍进行必要的分类处理,这样既方便管理人员对图书的管理,也方便读者的借阅,使图书管理井然有序。 1.2 功能分析 图书分类管理:为了便于不同书籍的管理,图书可分为不同的类别,用于编辑不同的权限,设置不同的管理方式。 读者分类管理:为了读者管理方便,可以将读者分为不同的类别,定义不同的属性,灵活的管理读者信息。 管理员分类管理:为了便于对管理员的管理,管理员可分为多种类别,并且可以编辑,各级管理员权限亦不同,实现管理员对图书管理系统的管理。 图书查询:设定多种搜索条件,按条件搜索符合读者要求的图书。如果读者知道某本书的书名、作者等相关信息,利用图书搜索功能就很方便了。 权限管理:权限管理包括两部分内容:对读者帐号的管理和对书籍信息的管理。管理员需要给用户分配用户名和密码,同时设定用户的类别。同时,管理员还需要给书籍规定类别,用以图书和读者的管理。 违规管理:用以管理图书借阅超期的读者,违规读者在得到相应处罚后才能继续借阅图书。 2系统功能模块结构图 本图书管理系统由图书管理,读者管理,图书借阅,管理员管理四个大的菜单模块组成,其总体结构图如下: 图书管理系统 图管读图书理者书借员管管阅模理理模块模 模块块 块 图1图书管理系统总体结构图 6 临沂大学2012届本科毕业设计说明书 2.1 系统调用的函数 函数功能 函数名称 显示管理员数据 Administers_show() 修改管理员数据 Administers() 增加管理员 Add_Administers() Dele_Administers() 删除管理 AdminType_show() 显示管理员类别数据 AdminType() 修改管理员类别数据 Add_AdminType() 增加管理员类别 Dele_AdminType() 删除管理员类别 Books_show() 显示书籍信息 Books() 修改书籍信息 Add_Books() 增加书籍 Dele_Books() 删除书籍 Surch_Books() 搜索书籍 Borrow_Books() 书籍借阅 BookType_show() 显示图书类别 BookType() 修改图书类别 Add_BookType() 增加图书类别 Dele_BookType() 删除图书类别 BorrowInfo_show() 显示借阅信息 7 临沂大学2012届本科毕业设计说明书 Add_BorrowInfo() 增加借阅信息 Surch_BorrowInfo() 搜索借阅信息 Return_BorrowInfo() 归还图书 date_show() 显示时间 datecpy() 时间复制函数 return_date() 还书日期计算函数 date_compare() 时间比较函数 get_time() 获取系统时间 OutLine_show() 显示违规记录 OutLine() 修改违规记录 Add_OutLine() 增加违规记录 OutLine_Judge() 判断图书是否过期 OutLine_Surch() 搜索违规记录 Readers_show() 显示读者信息 Readers() 修改读者信息 Add_Readers() 增加读者 Dele_Readers() 删除读者 ReaderType_show() 显示读者类别 ReaderType() 修改读者类别 Add_ReaderType() 增加读者类别 Dele_ReaderType() 删除读者类别 图2系统调用的函数图 8 临沂大学2012届本科毕业设计说明书 2.2 图书管理系统模块 主菜单包括:读者登陆,管理员登陆,图书查询,退出。 读者登陆:图书借阅,已借图书,借阅历史,违规记录,退出。 管理员登陆:图书查询,图书管理,读者管理,违规处理,返回上层,退出。 图书查询:根据图书名称查询图书。 退出:退出图书管理系统。 主菜单 读者登陆 管理员登陆 图书查询 退出 添加图书 图书借阅 图书查询 删除图书 已借图书 添加类别 图书管理 借阅历史 删除类别 违规记录 返回 退出 添加读者 读者管理 删除读者 添加类别 违规处理 删除类别 返回上一层 返回 退出 图3图书管理系统模块 9 临沂大学2012届本科毕业设计说明书 3 图书管理系统的结构 3.1 主函数流程图 3.1.1主控模块 在该模块中,提供系统主菜单,通过主菜单用户选择读者登陆、管理员登陆、 图书查询和退出。 开始 数据结构定义 显示系统菜单 Y Y 调用读者登录菜单 b=1? ReaderMenu() N Y Y 调用管理员登陆菜单 b=2? AdminMenu() N Y Y 调用图书查询函数 b=3? Surch_Books() N N b=4? Y 退出 图4主控模块流程图 10 临沂大学2012届本科毕业设计说明书 3.1.2读者登陆模块 在该模块中,提供子菜单供用户选择图书查询,已借书目,借阅历史,违规 记录和退出。查询函数直接调用借阅函数借阅图书。已借书目查询未归还图书。 借阅历史查询已还图书。违规记录查询超期未还图书。 开始 显示读者菜单 Y 调用图书借阅函数 b=1? Borrow_Books() N Y 调用借阅信息查询函数 b=2? Surch_BowwowInfo() N 调用借阅信息查询函数 Y b=3? Surch_BowwowInfo() N 调用违规记录查询函数 Y b=4? OutLine_Surch() N N b=5? Y 退出 图5读者登陆模块流程图 11 临沂大学2012届本科毕业设计说明书 3.1.3管理员登陆模块 在该模块中,提供子菜单供用户选择图书查询,图书管理,读者管理,违规记录,返回上层和退出。查询菜单调用图书查询函数查询图书。图书馆里调用图书管理菜单,对图书管理进行各种操作。读者管理调用读者管理菜单,对读者进行各种操作。违规记录调用违规记录处理函数,对读者超期的图书进行管理。返回上一层为保持管理员的登陆状态,以便读者借阅图书。退出为管理员退出登陆,此状态下读者不可借阅图书。 开始 显示管理员菜单 Y 调用图书查询函数 b=1? Surch_Books() N Y 调用图书管理菜单 b=2? Book_Admin_Menu() N Y 调用读者管理菜单 b=3? Reader_Admin_Menu() N Y 调用违规处理函数 b=4? OutLine_alter() N Y b=5? N N b=6? Y 退出 图6管理员登陆模块流程图 12 临沂大学2012届本科毕业设计说明书 3.1.4图书管理模块 在该菜单中供用户选择添加图书,删除图书,添加类别,删除类别和返回。添加图书调用添加图书函数。删除图书调用图书删除函数。添加类别调用添加类别函数。删除类别调用类别删除函数。返回为退出图书图书管理菜单,并返回上层菜单。 开始 显示图书管理菜单 Y 调用添加图书函数 b=1? Add_Books() N Y 调用删除图书函数 b=2? Dele_Books() ) N Y 调用添加图书类别函数 b=3? Add_BookType() N Y 调用删除图书类别函数 b=4? Dele_BookType() N N b=5? Y 返回 图7图书管理模块流程图 13 临沂大学2012届本科毕业设计说明书 3.1.5读者管理模块 在该菜单中供用户选择添加读者,删除读者,添加类别,删除类别和返回。 添加读者调用读者添加函数。删除读者调用读者删除函数。添加类别调用读者类 别添加函数,删除类别调用读者类别删除函数。返回为退出读者管理菜单,并返 回上一层。 开始 显示图书管理菜单 Y 调用添加读者函数 b=1? Add_Readers() N Y 调用删除读者函数 b=2? Dele_Readers() ) N Y 调用添加读者类别函数 b=3? Add_ReaderType() N Y 调用删除读者类别函数 b=4? Dele_ReaderType() N N b=5? Y 返回 图8读者管理模块流程图 14 临沂大学2012届本科毕业设计说明书 3.2 实体数据结构 3.2.1读者类别结构 next指针 类别编号 读者类别 备注 类别名称 最多节约数借阅期限 量 图9读者类别结构图 3.2.2读者信息结构 next指针 密码 姓名 备注 证件号 有效期限 读者信息 类别 办证日期 院系 电子邮箱 电话 图10读者信息结构图 15 临沂大学2012届本科毕业设计说明书 3.2.3图书类别结构 类别编号 next指针 图书类别 类别名称 备注 图书关 键字 图11图书类别结构图 3.2.4图书数据结构 索书号 next指针 备注 图书编号 馆藏地址 图书名称 剩余数量 图书信息 图书类别 总数 作者 关键字 出版社 登记时间 出版日期 页数 单价 图12图书信息结构图 16 临沂大学2012届本科毕业设计说明书 3.2.5管理员类别结构 类别编号 next指针 管理员类别 类别名称 备注 管理级别 管理期限 图13管理员类别结构图 3.2.6管理员数据结构 类别 证件号 next指针 姓名 管理员类别 备注 电话 办理日期 电邮 密码 图14管理员数据结构图 17 临沂大学2012届本科毕业设计说明书 3.2.7借阅信息结构 图书编号 图书名称 next指针 读者证号 借阅信息 备注 读者姓名 借阅状态 借阅日期 还书日期 图15借阅信息结构图 3.2.8违规记录数据结构 next指针 读者证号 违规记录 处理状态 读者姓名 书籍编号 书籍名称 图16违规记录结构图 18 临沂大学2012届本科毕业设计说明书 3.3 程序文件存储设计 程序数据采用链表结构。链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。用数组存储数据时,必须事先定义固定的长度(即元素个数)。如果事先难以确定元素个数,则必须把数组定义的足够大,以便能存放任意数目的数据,显然这将会浪费内存。链表则没有这种缺点,它根据需要开辟内存单元。所以本程序选用链表结构存储数据。 3.3.1链表存储结构简述 head 1249 1356 1475 1021 A B C D 1249 1356 1475 1021 NULL 图17链表示意图 链表有一个“头指针”变量,图中head表示,它存放一个地址,该地址指向一个元素。链表中每一个元素成为“结点”,每个结点都应包括两个部分;用户需要用的实际数据和下一个结点的地址。head指向第一个元素;第一个元素又指向第二个元素??直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。 链表中各个元素在内存中可以不是连续存放的。要找某一元素,必须先找到上一个元素,根据它提供的下一元素地址才能找到下一元素。如果不提供“头指针”(head),则整个链表都无法访问。由此可见,头指针在链表中得重要性。由此,本程序中头指针都列为全局变量,可供各个文件中函数调用,保证数据的流通。同时,头指针也不直接应用,而是传递给同类型指针后再应用,用以保证头指针不被随意修改,保证程序的稳定性。 3.3.2动态链表的建立 建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相连的关系。 head 10101 p1 A p2 (a) 19 临沂大学2012届本科毕业设计说明书 head p1 10101 10103 A B P2 (b) head p1 10101 10103 A B p2 (c) P1 head 10101 10103 A B P2 (d) p1 head 10101 10103 10107 A B B p2 (e) 20 临沂大学2012届本科毕业设计说明书 P1 head 10101 10103 10107 A B C p2 (f) 图18链表建立示意图 当输入第一个结点数据时,令head=p1,即把p1的值赋给head,也就是使head也指向新开辟的结点(图18a)。p1所指向的新开辟的结点就成为链表中第一个结点。然后再开辟另一个结点并使p1指向它,接着输入该结点的数据(图18b)。当链入第二个结点时,将p1的值赋给p2->next,此时p2指向第一个结点,因此执行“p2->next=p1”就将新结点的地址赋给第一个结点的next成员,使第一个结点的next成员指向第二个结点(图18c)。接着使p2=p1,也就是使p2指向刚才建立的结点(图18d)。接着再开辟一个结点并使p1指向它,并输入该结点的数据(图18e)。再次循环建立结点,又将p1的值赋给p2->next,也就是将第3个结点连接到第2个结点之后,并使p2=p1,使p2指向最后一个结点(图18f)。在结束结点建立时,最后一个结点next成员应被赋给NULL,它不指向任何结点。 3.3.3动态链表的删除 动态链表的删除指删除链表中得某一个结点。即查找到要删除的结点后删除此结点,再将其余链表连接。 A B C D E (a) A B C D E (b) 图19 21 临沂大学2012届本科毕业设计说明书 与此相仿,从一个动态链表中删去一个结点,并不是真正从内存中把它抹掉,而是把它从链表中分离开来,只要撤销原来的连接关系即可。 head p1 10101 10103 10107 NULL (a) head p1 10101 10103 10107 p2 NULL (b) head p1 10101 10103 10107 NULL (c) head p1 10101 10103 10107 NULL p2 (d) 图20动态链表删除示意图 22 临沂大学2012届本科毕业设计说明书 设两个指针变量p1和p2,先使p1指向第一个结点(图20a)。如果要删除的不是第一个结点,则使p1后移指向下一个结点(将p1->next赋给p1),在此之前应将p1的值赋给p2,是p2指向刚才检查过的那个结点(图20b)。如此一次一次地使p1后移,直到找到所要删除的结点或检查完全部链表都找不到要删除的结点为止。如果找到某一结点是要删除的结点,还要区分两种情况:?要删除的是第一个结点(p1的值等于head的值,如图20a那样),则应将p1->next )。这时head指向原来的第二个结点。第一个结点虽然仍存在,赋给head(图20c 但它已与链表脱离,因为链表中没有一个结点或头指针指向它。虽然p1还指向它,它仍指向第二个结点,但仍无济于事,现在链表的第一个结点是原来的第二个结点,原来第一个结点已“丢失”,即不再是链表中得一部分了。?如果要删除的不是第一个结点,则将p1->next赋给p2->next(图20d)。p2->next原来指向p1指向的结点(图中第二个结点),现在p2->next改为指向p1->next所指向的结点(图中第三个结点)。P1所指向的结点不再是链表的一部分。 还要烤炉链表是空表(无结点)和链表中找不到要删除的结点的情况。 3.3.4动态链表的插入 对链表的插入是指将一个结点插入到一个已有的链表中。 根据插入的位置不同,可分为三种插入方式:?插在链表开头。?插在链表结尾。?插在链表中间。 p1 head 10101 10103 NULL p0 10108 (a) 23 临沂大学2012届本科毕业设计说明书 head p1 10101 10103 NULL p0 10108 (b) 图21动态链表插入示意图 由于在本程序中只用到第一种插入方式,所以此处只对第一种插入方式进行讲解。 先将指针变量p0指向待插入结点,p1指向第一个结点,见图21a。插入位置为第一个结点之前(即p1等于head),将p0赋给head,将p1赋给p0->next,见图21b。 3.3.5数据文件存储 为了使用方便,容易理解和对文件直接访问,本程序用fprintf和fscanf函数对磁盘文件读写。这种存储方式在输入时要将ASC?码转换为二进制形式,在输出是又要将二进制形式转换成字符,花费时间比较多。此处可以用fread和fwrite函数代替,但是为了更方便阅读文件,此处不做代替。 程序数据存取主要由八个文件:Administers.dat、AdminType.dat、Books.dat、BookType.dat、Readers.dat、ReaderType.dat、BorrowInfo.dat、OutLine.dat组成。 Administers.dat:用于存储管理员信息。程序的增加管理员、删除管理员等功能均是对此文件进行读写操作。 AdminType.dat:用于存储管理员类别信息。程序的增加管理员类别、删除管理员类别等功能均是对此文件的读写操作。 Books.dat:用于存储图书信息。程序的增加图书、删除图书等功能均是对此文件的读写操作。 24 临沂大学2012届本科毕业设计说明书 BookType.dat:用于存储图书类别。程序的增加图书类别、删除图书类别等功能均是对此文件的读写操作。 Readers.dat:用于存储读者信息。程序的增加读者、删除读者等功能均是对此文件的读写操作。 ReaderType.dat:用于存储读者类别。程序的增加读者类别、删除读者类别等功能均是对此文件的读写操作。 BorrowInfo.dat:用于存储借阅信息。程序的增加借阅信息、修改借阅信息等功能都是对此文件的读写操作。 OutLine.dat:用于存储违规记录。程序的增加违规记录、修改违规记录等功能均是对此文件的读写操作。 4 图书管理系统测试 4.1 测试过程 测试过程中遇到了很多的错误,这点是由于自己基本功不扎实所造成的,出错较多的原因有:?scanf函数中网加取址符&。?输入法全角半角转换。很多符号用了全角符号。?链表建立时尾结点next成员没有赋值NULL。 4.2 实验结果 程序基本达到设计要求,由于使用了菜单功能,程序的操作更加直观,一般情况下能正确提示错误信息。但是在测试中也发现软件的一些不足与缺陷,需要进一步修改和维护时予以纠正。在C-free下运行良好。 4.3 系统缺陷 目前测试已没有错误,但是经过长期使用,可能还会发现未知的错误。此系统只是初步开发,还不够人性化,操作不够方便。 5出错处理 5.1 出错输出信息 根据不同的出错情况给出不同的出错信息。 如:输入密码不对是提示“密码错误,请重新输入”。 5.2 出错处理对策 给用户提示信息,让用户重新输入。 6安全设计 为每个操作人员设置账号及口令,规定每一级操作人员的权限。 25 临沂大学2012届本科毕业设计说明书 7 设计心得 通过对此系统的设计,我学会了很多东西,包括从系统开发的初衷、需求分析到功能设计和编程。同时我也体会到了自己的许多不足之处,我的基本功还太不扎实,有很多的低级错误,使得我耽误了很多的时间。以后我会经常动手写一些小程序以巩固自己。另外我还会继续更改此系统,改正其中的一些错误和不足,使其更人性化,更易使用。 26 临沂大学2012届本科毕业设计说明书 参 考 文 献 [1] 谭浩强.C语言设计第三版.清华大学出版社.2005 [2] 康莉、李宽.零基础学C语言.机械工业出版社.2009 [3] Al Kelley、Ira Pohl.C语言教程.机械工业出版社.2007[4] 苏剑.标准C++编程宝典.电子工业出版社.2005 [5] 杨友东.Visual C++程序设计全程指南.电子工业出版社.2009 附 录 附C语言编写图书管理系统.rar 27 转载请注明出处范文大全网 » C语言编写图书管理系统” 输入书名,如果存在则自动删除该书籍所有信 ”,输入卡号即可删除该卡。 \n"); /*删除图书*/ printf(" 3:\n"); /*删除卡号*/ printf(" 3:范文二:C语言编写图书管理系统
范文三:用C语言编写的图书管理系统
范文四:Java编写的简单图书管理系统
范文五:C语言编写图书管理系统.doc