资源描述
数据结构课程设计
计算机科学和技术级1班
课程设计题目:图书借阅管理系统
姓名:
学号:
一.需求分析说明
图书借阅处理过程简述处理过程关键包含:新增图书上架、办理图证、图书查询、借书、还书等。
(1)新增图书上架新书上架时,需要登记新书:书名、作者、出版社、总册数信息。
(2)办理图书借阅证读者办理借书证时,需要登记读者(学生)学号、姓名。
(3)图书查询读者根据图书编号查询图书基础信息,并能够得悉现还有几册能够借阅。
(4)借书每个学生读者最多借5本书。读者借书时,应登记书号、借书日期(年月日)。
2.数据分析数据处理过程中包含到两个实体:图书和会员;各实体应含有属性以下:图书(书号、书名、作者,总册数)读者(学号、姓名、班级)因为同一个图书能够有多册上架,
每个读者最多能够借阅5本书,图书借阅属性以下:借阅(书号、借书日期)
3.功效分析系统功效模块包含:图书增加、图书删除、图书查询、借书、还书;另外还包含图书信息修改和读者信息修改。
二.基础功效
1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书);
2)会员管理(增加会员、查询会员、删除会员、借书信息);
3)系统管理(初始化、载入数据、保留数据、退出程序);
三.程序设计
#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#define NULL 0
typedef struct BookInfo{ /////图书结构
int b_Code; ////图书编号
char b_Name[20]; /////名称
int b_Total; /////总数
int b_Out; ///借出数
BookInfo* nextbook; //////下一类图书
}BookInfo;
typedef struct MemberInfo{ ///会员结构
long m_Code; /////会员编号
char m_Name[20]; ////会员名字
int l_Codes[6]; /////以借书编号,最多5
MemberInfo* nextmember; ////下一会员
}MemberInfo;
typedef struct System{ ///管理系统结构
BookInfo* BI;
MemberInfo* MI;
int BookTotal; ////图书类库存量
int MemberTota; /////会员数量
}System;
System* InitSystem();/////
void AddBook(System*);////增加图书
BookInfo* SearchBook(System*,int);////查询图书信息
void DelBook(System*);/////删除图书
void BrrowBook(System*);///////借书处理
void TurnBackBook(System*);////还书处理
void AddMember(System*);/////添加会员
void DelMember(System*);////删除会员
MemberInfo* SearchMember(System*,int);/////查询会员信息
void StoreData(System*);
void LoadData(System*);
void ExitSystem();
void main()
{
System* S=InitSystem();
int sel;
do{
cout<<"\n\t\t\t\t图书管理系统"<<endl;
cout<<"\t\t\t******************************"<<endl;
cout<<"\t\t\t******************************"<<endl;
cout<<"\t\t\t 1.增加图书.\t 2.查询图书.\n\t\t\t 3.删除图书.\t 4.借书处理.\n\t\t\t 5.还书处理.\n\t\t\t 6.添加会员.\t 7.删除会员.\n\t\t\t 8.查询会员.\t 9.载入数据.\n\t\t\t10.保留数据.\t11.退出程序.\n";
cout<<"\t\t\t******************************"<<endl;
cout<<"\t\t\t******************************"<<endl;
cout<<"请选择:";
do{
cin>>sel;
if(sel>=1&&sel<=11)break;
cout<<"选择错误!\n重新输入:"<<endl;
}while(1);
switch(sel){
case 1:AddBook(S);break;
case 2:SearchBook(S,-1);break;
case 3:DelBook(S);break;
case 4:BrrowBook(S);;break;
case 5:TurnBackBook(S);break;
case 6:AddMember(S);break;
case 7:DelMember(S);break;
case 8:SearchMember(S,-1);break;
case 9:LoadData(S);break;
case 10:StoreData(S);break;
default:ExitSystem();
}
}while(1);
}
System* InitSystem()
{
System* S=(System*)malloc(sizeof(System));
S->BI=(BookInfo*)malloc(sizeof(BookInfo));
S->BookTotal=0;
S->BI->nextbook=NULL;
S->MI=(MemberInfo*)malloc(sizeof(MemberInfo));
S->MemberTota=0;
S->MI->nextmember=NULL;
return S;
}
void AddBook(System* S)
{
int Tempcode;
char sel;
BookInfo* p=S->BI;
BookInfo* t;
BookInfo* m;
int num;
do{
cout<<"输入图书编号:";
cin>>Tempcode;
if(m=SearchBook(S,Tempcode)){
cout<<"这类书以有库存.\n输入图书入库量:"<<endl;
cin>>num;
m->b_Total+=num;
}
else{
t=(BookInfo*)malloc(sizeof(BookInfo));
t->b_Code=Tempcode;
cout<<"输入图书名称:";
cin>>t->b_Name;
cout<<"输入图书入库量:";
cin>>t->b_Total;
t->b_Out=0;
t->nextbook=p->nextbook;
p->nextbook=t;
S->BookTotal++;
}
cout<<"添加完成!"<<endl;
cout<<"还要添加吗?(Y/N)";
cin>>sel;
if(sel=='n'||sel=='N'){
cout<<"结束添加"<<endl;
return;
}
}while(1);
}
BookInfo* SearchBook(System* S,int code){
BookInfo* bi=S->BI->nextbook;
int bookcode;
if(code==-1){
cout<<"请输入要查询图书编号:";
cin>>bookcode;
}
else bookcode=code;
while(bi&&bi->b_Code!=bookcode)bi=bi->nextbook;
if(code==-1){
if(!bi)cout<<"没找到你所要图书."<<endl;
else {
cout<<"图书编号为:"<<bi->b_Code<<endl;
cout<<"图书名称为:"<<bi->b_Name<<endl;
cout<<"图书库存量为:"<<bi->b_Total<<endl;
cout<<"图书借出量为:"<<bi->b_Out<<endl;
}
}
return bi;
}
void DelBook(System* S){
BookInfo* bi;
BookInfo* pl=S->BI;
MemberInfo* memi;
char sel;
int tempcode;
int i;
do{
pl=S->BI;
bi=pl->nextbook;
memi=S->MI->nextmember;
cout<<"请输入要删除图书编号:";
cin>>tempcode;
while(bi){
if(bi->b_Code==tempcode)break;
pl=bi;
bi=bi->nextbook;
}
if(bi==0)cout<<"没有找到要删除图书"<<endl;
else{
pl->nextbook=bi->nextbook;
S->BookTotal--;
while(memi){
for(i=1;i<=memi->l_Codes[0];i++){
if(memi->l_Codes[i]==tempcode)break;
}
if(i<=memi->l_Codes[0]){
for(;i<memi->l_Codes[0];i++)memi->l_Codes[i]=memi->l_Codes[i+1];
memi->l_Codes[0]--;
}
memi=memi->nextmember;
}
free(bi);
}
cout<<"还有图书要删除吗?(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"删除图书结束"<<endl;
return;
}
}while(1);
}
void BrrowBook(System* S)
{
BookInfo* bi=S->BI->nextbook;
BookInfo* p;
char sel;
int memcode;
MemberInfo* mp;
int tempcode;
do{
cout<<"输入要借出书号:";
cin>>tempcode;
p=SearchBook(S,tempcode);
if(!p){
cout<<"没有找到要借出图书."<<endl;
}
else{
cout<<"此书现存量为"<<(p->b_Total-p->b_Out)<<endl;
if(!(p->b_Total-p->b_Out))cout<<"没有足够书了,外借失败."<<endl;
else{
cout<<"请输入会员编号:";
cin>>memcode;
mp=SearchMember(S,memcode);
if(!mp)cout<<"会员编号输入错误,外借失败"<<endl;
else{
if(mp->l_Codes[0]==5)cout<<"借书量不能超出5本";
else{
p->b_Out++;
mp->l_Codes[++mp->l_Codes[0]]=tempcode;
cout<<"外借成功."<<endl;
}
}
}
}
cout<<"\n还有图书要借出吗?(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"外借操作结束."<<endl;
return;
}
}while(1);
}
void TurnBackBook(System* S)
{
BookInfo* bi=S->BI->nextbook;
BookInfo* p;
MemberInfo* mp;
int membercode;
int tempcode;
int i;
char sel;
do{
cout<<"输入归还书号:";
cin>>tempcode;
p=SearchBook(S,tempcode);
if(!p){
cout<<"书号输入错误."<<endl;
}
else{
cout<<"此书现存量为"<<(p->b_Total-p->b_Out)<<endl;
cout<<"请输入会员编号:";
cin>>membercode;
if(!(mp=SearchMember(S,membercode)))cout<<"会员编号输入错误,归还失败"<<endl;
else{
p->b_Out--;
for(i=1;i<=mp->l_Codes[0];i++){
if(mp->l_Codes[i]==tempcode)break;
}
while(i<mp->l_Codes[0]){
mp->l_Codes[i]=mp->l_Codes[i+1];
i++;
}
mp->l_Codes[0]--;
cout<<"归还成功."<<endl;
}
}
cout<<"还有要归还图书吗?(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"归还结束."<<endl;
return;
}
}while(1);
}
void AddMember(System* S)
{
int Tempcode;
char sel;
MemberInfo* p=S->MI;
MemberInfo* t;
do{
cout<<"输入会员编号:";
cin>>Tempcode;
t=(MemberInfo*)malloc(sizeof(MemberInfo));
t->m_Code=Tempcode;
cout<<"输入会员姓名:";
cin>>t->m_Name;
t->l_Codes[0]=0;
t->nextmember=p->nextmember;
p->nextmember=t;
S->MemberTota++;
cout<<"添加完成!"<<endl;
cout<<"还要添加吗?(Y/N)";
cin>>sel;
if(sel=='n'||sel=='N'){
cout<<"结束添加"<<endl;
return;
}
}while(1);
}
MemberInfo* SearchMember(System* S,int code)
{
MemberInfo* bi=S->MI->nextmember;
int membercode;
int i;
if(code==-1){
cout<<"请输入要查询会员编号:";
cin>>membercode;
}
else membercode=code;
while(bi&&bi->m_Code!=membercode)bi=bi->nextmember;
if(code==-1){
if(!bi)cout<<"没找到指定会员."<<endl;
else {
cout<<"会员编号为:"<<bi->m_Code<<endl;
cout<<"名称为:"<<bi->m_Name<<endl;
cout<<"已借图书有:"<<bi->l_Codes[0]<<"本."<<endl;
for(i=1;i<=bi->l_Codes[0];i++)
cout<<bi->l_Codes[i]<<' ';
cout<<endl;
}
}
return bi;
}
void DelMember(System* S)
{
MemberInfo* bi;
MemberInfo* pl;
BookInfo* book;
char sel;
int i;
int tempcode;
do{
bi=S->MI->nextmember;
pl=S->MI;
cout<<"请输入要删除会员编号:";
cin>>tempcode;
while(bi){
if(bi->m_Code==tempcode)break;
pl=bi;
bi=bi->nextmember;
}
if(!bi)cout<<"没有找到要删除会员编号.";
else{
pl->nextmember=bi->nextmember;
S->MemberTota--;
for(i=1;i<=bi->l_Codes[0];i++){
if(!(book=SearchBook(S,bi->l_Codes[i]))){
cout<<"删除会员犯错!"<<endl;
}
else{
book->b_Out--;
book->b_Total--;
}
}
free(bi);
}
cout<<"还有会员要删除吗?(Y/N)";
cin>>sel;
if(sel=='N'||sel=='n'){
cout<<"删除会员结束"<<endl;
return;
}
}while(1);
}
void StoreData(System* S){
FILE* fp;
BookInfo* bi=S->BI->nextbook;
if(!(fp=fopen("BookSys","wb"))){
cout<<"打开文件BookSys失败!"<<endl;
exit(0);
}
fwrite(&(S->BookTotal),sizeof(int),1,fp);
while(bi){
fwrite(bi,sizeof(BookInfo),1,fp);
bi=bi->nextbook;
}
MemberInfo* mi=S->MI->nextmember;
fwrite(&(S->MemberTota),sizeof(int),1,fp);
while(mi){
fwrite(mi,sizeof(MemberInfo),1,fp);
mi=mi->nextmember;
}
fclose(fp);
}
void LoadData(System* S){
FILE* fp;
if(!(fp=fopen("BookSys","rb"))){
cout<<"打开文件BookSys失败"<<endl;
exit(0);
}
BookInfo* bi=S->BI;
BookInfo* tempbi;
fread(&(S->BookTotal),sizeof(int),1,fp);
for(int i=1;i<=S->BookTotal;i++){
tempbi=(BookInfo*)malloc(sizeof(BookInfo));
fread(tempbi,sizeof(BookInfo),1,fp);
bi->nextbook=tempbi;
bi=tempbi;
}
bi->nextbook=NULL;
MemberInfo* mi=S->MI;
MemberInfo* tempmi;
fread(&(S->MemberTota),sizeof(int),1,fp);
for(i=1;i<=S->MemberTota;i++){
tempmi=(MemberInfo*)malloc(sizeof(MemberInfo));
fread(tempmi,sizeof(MemberInfo),1,fp);
mi->nextmember=tempmi;
mi=tempmi;
}
mi->nextmember=NULL;
fclose(fp);
}
void ExitSystem(){
char select;
cout<<"警告: 程序结束后未存放数据将消失."<<endl;
cout<<"确定要退出吗?(Y/N)";
cin>>select;
if(select=='y'||select=='Y')exit(0);
if(select=='n'||select=='N')return;
}
四.心得体会
历经大半个学期努力,我图书管理系统最终准期完成了。此次做系统给我最大感慨有两个。
第一个就是有了一个利用本专业所学到知识,来练习,实践机会。
第二个就是增强了自己自信心。 经过进行图书借阅管理系统设计,深入明确了研制一个管理信息系统方法和思绪,将系统开发各阶段基础活动贯穿起来,使我愈加形象、具体了解了管理信息系统。系统开发过程是一个巩固以前所学计算机知识,掌握新技能过程。我从这一阶段工作中收益非浅,经过前段时间课程设计,我能够融会贯通所学专业基础知识和专业理论知识,培养我们综合利用专业知识分析问题、处理问题能力及利用工具软件能力。不仅搞清了以前对系统开发部分模糊认识,而且提升了写代码水平,培养了严谨工作作风,为以后在工作岗位上用好管好计算机打下了坚实基础。
在做系统过程中,我碰到最大困难是调程序方面。在运行程序过程中常常会出现程序自行中止,需要进行调试信息。这些信息使得我不得不反复看书,琢磨程序。在一遍一遍调试之下,程序最终被调通了。那时,我最终能够上上舒一口气了。
我系统规模比较小同时因为我时间和能力等多方面原因影响,我们系统也存在一定缺点。
展开阅读全文