程序设计报告图书管理系统
题目:图书管理系统
一、课题内容
基于角色管理的简易图书管理系统 实现功能:
1. 角色管理。设有图书管理员和普通用户两类角色,他们设有不同的权限,各类用户进入系统时需先登录。
2. 图书管理员角色,图书管理员可对图书信息的录入、删除、及修改、统计; 3. 普通用户角色,普通用户可借阅图书、归还图书。
提高要求:使用文本文件存储各类信息,界面友好,有出错处理。 实现语言:C 语言或C++语言
二、课题要求
1. 熟练运用C 或C++课程所学习的理论和概念。
2.熟练运用循环结构、分支结构、顺序结构。 3.熟练掌握函数的定义和调用方法。
4.熟悉对于文件的打开、关闭和文件的读写。 5.熟练掌握对于C 中结构体或C++中类的操作。
6. 按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计。
三、需求分析
1. 该程序可实现对于普通用户(即学生) 和管理员两种角色对于图书管理系统的操作。
2.普通用户(即学生) 登陆后可对图书进行查询、借阅、归还。
3.管理员登陆后可对图书进行增加、删除、修改、统计,以及对图书馆中职
员和学生的信息统计,方便对学生补办借书卡以及人员统计的管理。 4.该程序中的查询图书功能有按书名和作者两类查找方式,以满足不同用户的需要。
四、概要设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
1. 模块功能说明:
(1).图书查询:可以通过对书名或作者两类方式的查找,查找到所要查找的书籍。
(2).图书借阅:进入该模块时需要普通用户登录,即学生输入自己的卡号,输入正确可进入借阅模块,输入错误则进行返回。
(3).管理员系统:进入管理员模式,进入该模块时需要管理员登陆,即输入管理员个人密码,进入后可以对图书进行增加、删除、修改、统计,以及对图书馆内职工和学生的信息管理。
(4).图书归还:进入该模块时需要普通用户登陆,即学生输入自己的卡号,输入正确可进入还书模块,输入错误则进行返回。 (5).退出系统:选择该选项,自动退出图书管理系统。
2. 描述算法的流程图: (1)主流程:
图书管理系统,进入后有查询图书、借阅图书、归还图书等功能,还可以进入管理员模式,或者退出系统。
其中,借阅图书和归还图书是针对普通用户(学生)设立的,进入时需要登录,即输入学生的借书卡卡号。
在管理员模式下,只有指定的管理员允许进入,进入前需先登录,即输入管理员密码,进入后可对图书进行增、删、查、改,同时可以实现对管理员和学生的信息管理。
图1. 主流程
(2)各主要模块流程:
①普通用户模式下的还书功能: 步骤:a. 输入学生卡号;
b. 系统通过文件读取卡号记录;
c. 判断卡号是否存在,卡号存在则跳转d ,否则跳转到f ;
d. 输入归还书籍;
e. 选择是否继续归还,是则跳转d ,否则跳转f ;
f. 结束,进行返回。
Y
图2. 普通用户模式下的还书功能
②普通用户模式下的借书功能: 步骤:a. 输入卡号;
b. 系统通过文件读取卡号记录;
c. 判断卡号是否存在,卡号存在则跳转d, 否则跳转h d. 输入借阅书籍;
e. 判断该书是否借出,借出则跳转f, 否则跳转g; f. 提示借书失败; g. 提示借书成功; h. 结束,进行返回。
N
图3. 普通用户模式下的借书功能
③管理员模式下的录入书籍功能: 步骤:a. 输入录入书籍的相关信息;
b. 标记该书是否借出;
c. 选择是否录入下一本, 若选择是,跳转到a, 若选择否,跳转到d ; d. 结束,进行返回。
图4. 管理员模式下的录入书籍功能
④管理员模式下的删除书籍功能: 步骤:a. 输入要删除的书籍;
b.选择是否真的要删除该书籍,若选择是,则跳转c, 否则跳转d ;
c.删除书籍; d.结束,进行返回。
N
图5. 管理员模式下的删除书籍功能
⑤管理员模式下的修改书籍功能: 步骤:a. 输入所要修改的书名; b. 系统显示该书信息; c. 输入所要修改的内容;
d. 选择修改序号、修改书名、修改作者,进行相应修改; e. 结束,进行返回。
图
6. 管理员模式下的修改书籍功能
⑥管理员模式下的书籍统计功能:
步骤:a. 系统自动对书籍编号和数量赋初值;
b.判断是否读入到文件尾部,若读到尾部则跳转到f ,否则跳转到c;
c.输出图书信息;
d.书籍数量和编号系统自动进行加一操作;
e. 判断是否读入到文件尾部,若读到尾部则跳转到f ,若否则跳转到c;
f.输出书籍的本数; g.结束,进行返回。
:
图7. 管理员模式下的书籍统计功能
⑦管理员模式下的借书卡管理功能:
步骤:a. 选择申请新卡、删除卡号、借书统计、卡号统计,进行相应操作; b.结束,进行返回。
五、源程序代码
#include #include #include #include
#define STACK_INIT_SIZE 10
struct student /*定义学生类型,用于存放借出的书籍*/ { int carnum; /*学生借书卡卡号*/ char lendbook[10]; /*借书书名*/ }student[1000];
struct employ /*定义管理员类型*/ { int employnum; /*管理员序号*/ char employname[15]; /*管理员姓名*/
int employage; /*管理员年龄*/ char employsex[2]; /*管理员性别*/ char employleve[10]; /*管理员学历*/ long int employtage; /*管理员工资*/
图8. 管理员模式下的借书卡管理功能
}employ[50];
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];
huanbook() /*还书函数*/ { FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
int i,n; int carnum;
char lendbook[10];
printf("请你输入你的卡号\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("请输入你要还的书的名字\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++) { 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"); fclose(fp2);
printf("还书完毕,按任意键返回\n"); /*清临时文件*/ getch(); system("cls"); return 1;
}
}
printf("
你没有借该书! /*出错提示*/ fclose(fp); getch();
system("cls");
return 0; } }
printf("无此卡号!!! 按任意键返回\n"); 错提示*/ fclose(fp); getch();
system("cls"); }
findbook() 籍函数2*/ { FILE *fp;
char bookname[10];
int ture,i;
fp=fopen("book.txt","r");
printf("请输入要查找的书名\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)
{
任意 键返 \n"); /*出/*查询书回
}
printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返
回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else { printf("此书已借出\n");
fclose(fp); return 0; } fclose(fp); return false; }
}
printf("没有你要查询的书籍\n"); fclose(fp); return false;
findbook1() /*查询书籍函数1*/
{ FILE *fp; char bookcreat[10];
int ture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的作者名\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) { if(strcmp(bookcreat,book[i].bookcreat)==0)
{ if(book[i].turefalse==1)
{ printf("这本书的详细资料是:%d %s %s 此书现在无人借阅\n按任意键返} else {
printf("这本书已经有人借出\n");
回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
fclose(fp); return 0; }
}
fclose(fp);
return false; } }
printf("没有你要查询的书籍\n"); fclose(fp); return false;
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("卡号:%d 借出的书籍:%s \n",student[i].carnum,student[i].lendbook); }
fclose(fp);
printf("目前共有%d本书借出\n",n); printf("按任意键\n"); getch(); return n;
n=n+1;
chabook() { char ch5;
do { printf(">>>>>>>>>>>>>>欢迎进入图书管理系统!\n");
printf(" |2:\n"); printf(" |0:\n"); printf("请输入0--2\n"); scanf("%s",&ch5); switch(ch5)
{ case '1':system("cls");findbook();getch();break; case '2':system("cls");findbook1();getch();break;
case '0':system("cls");break;
default:printf("无此操作\n");getch();break;
}
}while(ch5!='0'); return false;
}
lendbook() { FILE *fp,*fp2; int i,n;
int carnum;
printf("请你输入你的卡号\n");
scanf("%d",&carnum); fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(struct car),1,fp)!=0;i++) { if(car[i].carnum==carnum)
{ n=i; fclose(fp); printf("请输入你要借阅的书的名字\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("对不起,此书已借出!\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);
/*借书函数*/
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);
printf("借书完毕,按任意键返回\n"); getch();
system("cls");
return; } }
printf("无此书籍! 任意键返回\n"); fclose(fp); getch();
system("cls");
return; }
}
printf("你的卡号不存在! 按任意键返回\n"); fclose(fp); getch(); system("cls"); }
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("第
%d
张
卡
卡
号
:
%d
级:%d>\n",i+1,car[i].carnum,car[i].studentname,car[i].studentclass); n=n+1;
}
fclose(fp);
printf("目前共有%d本书\n",n); printf("按任意键\n"); getch(); }
delcar() { FILE *fp,*fp2; int i; int carnum; char choice;
fp=fopen("car.txt","r");
fp2=fopen("bookl.txt","w");
printf("请输入你要删除的卡号\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);
}
}
fclose(fp);
fclose(fp2);
printf("是否要删除该卡?\n"); scanf("%s",&choice);
if(choice=='y'||choice=='Y') {
姓
名
:
%s
班
/*删除借书卡函数*/
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("按任意键返回\n"); getch(); system("cls");
return;
} else
{
printf("按任意键返回\n"); getch();
system("cls");
return; } }
addcar() { FILE *fp; int i=0;
fp=fopen("car.txt","a+"); printf("请你输入卡号\n"); scanf("%d",&car[i].carnum); printf("请你输入学生姓名\n"); scanf("%s",car[i].studentname); printf("请你输入班级\n");
scanf("%d",&car[i].studentclass); fwrite(&car[i],sizeof(struct car),1,fp); fclose(fp);
printf("输入完毕,任意键返回\n"); getch();
system("cls");
}
/*增加借书卡函数*/
changemploy() {
FILE *fp,*fp2;
char employname[10],choice; int i;
fp=fopen("employ.txt","r"); fp2=fopen("bookl.txt","w");
printf("请你输入要修改的职工的名字\n"); scanf("%s",employname);
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++) {
if(strcmp(employ[i].employname,employname)==0) { printf("你所要修改的职工的资料如下,请选择你要修改的内容\n");
printf("\n",employ[i].employnum,employ[i].employname,employ[i].employage,employ[i].employsex,employ[i].employleve,employ[i].employtage); printf("2:修改职工名\n"); printf("3:修改职工年龄\n"); printf("4:修改职工工资\n");
printf("5:修改职工学历\n"); printf("请输入1-5:");
scanf("%s",&choice); switch(choice) {
case '1': { printf("请输入新的职工号\n"); scanf("%d",&employ[i].employnum); }
fwrite(&employ[i],sizeof(struct employ),1,fp2);
break;
case '2': { printf("请输入新的职工姓名\n");
scanf("%s",employ[i].employname);
fwrite(&employ[i],sizeof(struct employ),1,fp2); }
break;
{ printf("请输入新的年龄\n"); } break;
case '4': { printf("请输入新的职工工资\n");
scanf("%d",&employ[i].employtage);
fwrite(&employ[i],sizeof(struct employ),1,fp2); scanf("%d",&employ[i].employage);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}
break;
case '5': { printf("请输入新的职工学历\n");
scanf("%s",employ[i].employleve);
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}
default:printf("没有这样的操作");break;
}
continue; }
fwrite(&employ[i],sizeof(struct employ),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("employ.txt","w"); fp2=fopen("bookl.txt","r");
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp2)!=0;i++) {
fwrite(&employ[i],sizeof(struct employ),1,fp); }
fclose(fp); fclose(fp2);
fp2=fopen("bookl.txt","w"); fclose(fp2);
printf("按任意键返回\n"); getchar(); system("cls"); return; }
delemploy()
{
FILE *fp,*fp2;
int i;
char employname[10],choice; fp=fopen("employ.txt","r"); fp2=fopen("bookl.txt","w"); printf("请输入你要删除的职工名\n"); scanf("%s",employname); for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++) { if(strcmp(employname,employ[i].employname)!=0) { fwrite(&employ[i],sizeof(struct employ),1,fp2); }
}
fclose(fp);
fclose(fp2);
printf("是否真的要删除该职工信息?\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("employ.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&employ[i],sizeof(struct employ),1,fp2)!=0;i++) { fwrite(&employ[i],sizeof(struct employ),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("bookl.txt","w"); fclose(fp2); printf("按任意键返回\n"); getch(); system("cls"); return true;
}
else
{
printf("按任意键返回\n");
getch(); system("cls"); return false;
}
employcount()
{
FILE *fp; int i,n=0; fp=fopen("employ.txt","r"); for(i=0;fread(&employ[i],sizeof(struct employ),1,fp)!=0;i++) { printf("第%d职工的信息如下:\n\n",n+1,employ[i].employnum,employ[i].employname,employ[i].employage,employ[i].employsex,employ[i].employleve,employ[i].employtage);
n++;
}
addemploy()
{
FILE *fp; char choice='y'; int i=1; fp=fopen("employ.txt","a+"); while(choice=='y'||choice=='Y') { printf("请你输入职工号码\n"); scanf("%d",&employ[i].employnum); printf("请你输入职工名\n"); scanf("%s",employ[i].employname); printf("请输入职工年龄\n"); scanf("%d",&employ[i].employage); printf("请你输入性别\n"); scanf("%s",employ[i].employsex); printf("请你输入职工的学历水平\n"); scanf("%s",employ[i].employleve); printf("请输入职工的工资\n"); } fclose(fp); printf("目前共有%d个职工\n",n); printf("按任意键返回\n");
fwrite(&employ[i],sizeof(struct employ),1,fp); printf("是否要输入下个职工信息?[N/Y]\n"); scanf("%s",&choice); system("cls");
}
printf("按任意键返回\n");
fclose(fp);
}
addbook() /*录入书籍函数*/ {
FILE *fp; int i=0; char choice='y'; fp=fopen("book.txt","a+"); while(choice=='y'||choice=='Y') { printf("请你输入第%d本书的序号\n",i+1); scanf("%d",&book[i].booknum); printf("请你输入书名\n"); scanf("%s",book[i].bookname); printf("请你输入书的作者\n"); scanf("%s",book[i].bookcreat); printf("请设为1或0,1代表书还没人借,0表示书已经借出\n"); printf("请你设定书的状态\n"); scanf("%d",&book[i].turefalse); fwrite(&book[i],sizeof(struct book),1,fp); printf("是否要输入下本书[N/Y]\n"); scanf("%s",&choice);
}
fclose(fp);
}
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("第%d本书\n",i+1,book[i].booknum,book[i].bookname,book[i].bookcreat,book[i].turefalse); n=n+1;
}
}
fclose(fp);
printf("目前共有%d本书\n",n);
printf("按任意键\n");
}
delbook()
{
FILE *fp,*fp2;
int i;
char bookname[10],choice;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
printf("请输入你要删除的书名\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("是否真的要删除该书籍?\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); /*删除书籍函数*/
} fclose(fp2); printf("按任意键返回\n"); getch(); system("cls"); return;
else
{
printf("按任意键返回\n");
getch(); system("cls");
return;
}
}
changebook() /*修改书籍函数*/ {
FILE *fp,*fp2; char bookname[10],choice; int i; fp=fopen("book.txt","r"); fp2=fopen("bookl.txt","w"); printf("请输入要修改的书名\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("你所要修改的书的资料如下,请选择你要修改的内容\n"); printf("序号:〈%d〉 书名:〈%s〉 作者:〈%s〉 \n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("1:修改书的序号\n");
printf("2:修改书名\n"); printf("3:修改作者\n"); printf("请输入1-3:"); scanf("%s",&choice); switch(choice) { case '1': { printf("请输入新的序号\n"); scanf("%d",&book[i].booknum);
} } } break; case '2': { printf("请输入新的书名\n"); } scanf("%s",book[i].bookname); fwrite(&book[i],sizeof(struct book),1,fp2); break; case '3': { printf("请输入新的作者\n"); scanf("%s",book[i].bookcreat); } fwrite(&book[i],sizeof(struct book),1,fp2); break; default:printf("没有这样的操作");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(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意键返回\n");
getchar();
system("cls");
return;
}
main()
{
char xuehao[15];
do { printf(">>>>>>>>>>>>>>欢迎进入图书管理系统!\n"); printf(" 2:(普通用户进入)\n"); printf(" 3:(管理员进入)\n"); printf(" 4:(普通用户进入)\n"); printf(" 0:\n"); printf("请输入0--4\n"); scanf("%s",&ch1); switch(ch1) { case '1':system("cls");chabook();break; case '2':system("cls");lendbook();break; case '3':system("cls"); { printf("请输入管理员密码 :\n"); scanf("%s",&xuehao); if(strcmp(xuehao,"11002805zouji")==0) { system("cls"); do {
printf("---------------欢迎进入管理系统!--------------\n");
scanf("%s",&ch2);
switch(ch2) { case '1':system("cls");addbook();break; case '2':system("cls");delbook();break; case '3':system("cls");changebook();break; case '4':system("cls");bookcount();getch();break; case '5': printf(" 1:\n"); printf(" 2:\n"); printf(" 3:\n"); printf(" 4:\n"); printf(" 5:\n"); printf(" 6:\n"); printf(" 0:\n"); printf("请输入0--6\n");
{
system("cls");
do
{
printf("---------------欢迎进入职工管理系统!--------------\n"); printf(" 1:\n");
printf(" 2:\n"); printf(" 3:\n"); printf(" 4:\n"); printf(" 0:\n"); printf("请输入0--4\n"); scanf("%s",&ch3); switch(ch3) { case '1':system("cls");addemploy();getch();break; case '2':system("cls");delemploy();break; case '3':system("cls");changemploy();break; case '4':system("cls");employcount();getch();break; case '0':system("cls");break; default:printf("无此操作\n");getch();break; } }while(ch3!='0'); }break; case '6': { system("cls"); do {
printf("---------------欢迎进入学生管理系统!--------------\n");
printf(" 1:\n"); printf(" 2:\n"); printf(" 3:\n"); printf(" 4:\n"); printf(" 0:\n"); printf("请输入0--4\n"); scanf("%s",&ch4); switch(ch4) { case '1':system("cls");addcar();break; case '2':system("cls");delcar();break;
} } case '3':system("cls");lendcount();break; case '4':system("cls");carcount();break; case '0':system("cls");break; default:printf("无此操作\n");getch();break; }while(ch4!='0'); }break; case '0':system("cls");break; default:printf("无此操作\n");getch();break; } }while(ch2!='0'); } else { } case '4':system("cls");huanbook();break; case '0':system("cls");break; default:printf("无此操作\n");getch();break; system("cls"); printf("密码错误, 无法进入!!!\n"); }break;
}while(ch1!='0');
}
六、测试数据及其结果分析
主界面:
查询图书模块:
借阅图书模块:
归还图书模块:
管理员系统界面:
增加图书模块:
删除图书模块:
修改图书模块:
书籍统计模块:
管理员员工管理模块:
管理员学生借书卡管理模块:
结果分析:
查询图书模块为公共权限。
借阅和归还图书模块进入时需输入相应的学生借书卡卡号,完成登陆后方可进入。
管理员系统界面进入时需输入相应的管理员密码,登陆后方可进入。该系统可对图书进行增、删、修改、统计,以及对于学生和图书馆员工的信息管理,为学生办理借书卡等手续。
七、调试过程中的问题
问题:
1. 在制作管理员系统时,要考虑到管理员为学生补办借书卡的情况。
2. 在制作图书借阅和归还模块时,想要通过借书卡的形式借书,但学生借书卡不止一张,不能通过指定卡号登陆。
3. 书的借、还、录入、统计,学生卡号的存取都要进行存档。
解决办法:
1. 把所有办理的卡号通过文件读入“car.txt ”中。
2. 读取“car.txt ”中的内容,用for 循环逐一寻找卡号,找到则进入相应模块,找不到提示错误。
3. 通过文件的读写进行存档。
算法的改进设计思想:
学生直接通过管理员办理卡号,由管理员统一对卡号进行管理。所以在管理员系统中新增对学生信息的管理。
八、设计总结
这次程序设计课程,我设计的是图书管理系统,这是我接触程序以来,第一次做这么大的一个程序。虽然课程只持续了短短的两周,但我让我更深层地接触了程序设计。比如对于文件的操作,这次通过自己查阅资料学到了平常学不到的知识。
首先,让我很深刻的一点,就是设计程序的严谨性。面对一个大型程序,必须考虑到方方面面,一点小错误会致使整个程序出现纰漏。其次,做一个大型程序,需要极大的耐心和毅力,在其过程中会碰到很多坎,但最终还是要坚持下去。 最后,就是学习到了模块化程序设计的方法。把一个大型工程划分成一个个小的模块去设计,不但任务会减轻,而且程序的思想规划会更加明确。
在这里,对帮助过我的指导老师表示忠心的感谢!