数据结构课程设计_数据结构课程设计全
数据结构课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构课程设计全”。
数据结构课程设计
计算机科学与技术2008级1班
课程设计题目:图书借阅管理系统
姓名:
学号:
一.需求分析说明
图书借阅处理过程简述处理过程主要包含:新增图书上架、办理图证、图书查询、借书、还书等。
(1)新增图书上架新书上架时,需要登记新书的:书名、作者、出版社、总册数的信息。
(2)办理图书借阅证读者办理借书证时,需要登记读者(学生)的学号、姓名。(3)图书查询读者按照图书编号查询图书基本信息,并可以得知现还有几册可以借阅。
(4)借书每个学生读者最多借5本书。读者借书时,应登记书号、借书日期(年月日)。
2.数据分析数据处理过程中涉及到两个实体:图书和会员;各实体应具有的属性如下:图书(书号、书名、作者,总册数)读者(学号、姓名、班级)由于同一种图书可以有多册上架,每个读者最多可以借阅5本书,图书借阅的属性如下:借阅(书号、借书日期)3.功能分析系统功能模块包括:图书增加、图书删除、图书查询、借书、还书;另外还包括图书信息修改和读者信息修改。
二.基本功能
1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息); 3)系统管理(初始化、载入数据、保存数据、退出程序);
三.程序设计
#include #include #include
#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
cout
cout
cout
cout
cout
cout
do{
cin>>sel;
if(sel>=1&&sel
cout
}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
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
cout
cin>>sel;
if(sel=='n'||sel=='N'){
cout
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
else {
coutb_Code
coutb_Name
coutb_Total
coutb_Out
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
else{
pl->nextbook=bi->nextbook;
S->BookTotal--;
while(memi){
for(i=1;il_Codes[0];i++){
if(memi->l_Codes[i]==tempcode)break;
}
if(il_Codes[0]){
for(;il_Codes[0];i++)memi->l_Codes[i]=memi->l_Codes[i+1];memi->l_Codes[0]--;
}
memi=memi->nextmember;}
free(bi);}
cout
cin>>sel;
if(sel=='N'||sel=='n'){
cout
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
else{
coutb_Total-p->b_Out)
if(!(p->b_Total-p->b_Out))cout
else{
cout
cin>>memcode;
mp=SearchMember(S,memcode);
if(!mp)cout
else{
if(mp->l_Codes[0]==5)cout
else{
p->b_Out++;
mp->l_Codes[++mp->l_Codes[0]]=tempcode;
cout
} } } }
cout
cin>>sel;
if(sel=='N'||sel=='n'){
cout
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
else{
coutb_Total-p->b_Out)
cout
cin>>membercode;
if(!(mp=SearchMember(S,membercode)))cout
else{
p->b_Out--;
for(i=1;il_Codes[0];i++){
if(mp->l_Codes[i]==tempcode)break;
}
while(il_Codes[0]){
mp->l_Codes[i]=mp->l_Codes[i+1];
i++;
}
mp->l_Codes[0]--;
cout
}
cout
cin>>sel;
if(sel=='N'||sel=='n'){
cout
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
cout
cin>>sel;
if(sel=='n'||sel=='N'){
cout
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
else {
coutm_Code
coutm_Name
coutl_Codes[0]
for(i=1;il_Codes[0];i++)
coutl_Codes[i]
cout
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;il_Codes[0];i++){
if(!(book=SearchBook(S,bi->l_Codes[i]))){
cout
}
else{
book->b_Out--;
book->b_Total--;
} }
free(bi);}
cout
cin>>sel;
if(sel=='N'||sel=='n'){
cout
return;}
}while(1);}
void StoreData(System* S){
FILE* fp;
BookInfo* bi=S->BI->nextbook;
if(!(fp=fopen(“BookSys”,“wb”))){
cout
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
exit(0);}
BookInfo* bi=S->BI;
BookInfo* tempbi;
fread(&(S->BookTotal),sizeof(int),1,fp);
for(int i=1;iBookTotal;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;iMemberTota;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
cout
cin>>select;
if(select=='y'||select=='Y')exit(0);
if(select=='n'||select=='N')return;}
四.心得体会
历经大半个学期的努力,我的图书管理系统终于如期完成了。此次做系统给我最大的感触有两个。
第一个就是有了一个利用本专业所学到的知识,来练习,实践的机会。
第二个就是增强了自己的自信心。通过进行图书借阅管理系统的设计,进一步明确了研制一个管理信息系统的方法和思路,将系统开发的各阶段的基本活动贯穿起来,使我更加形象、具体的了解了管理信息系统。系统开发的过程是一个巩固以前所学的计算机知识,掌握新技能的过程。我从这一阶段工作中收益非浅,通过前段时间的课程设计,我能够融会贯通所学的专业基础知识和专业理论知识,培养我们综合运用专业知识分析问题、解决问题的能力及运用工具软件的能力。不仅弄清了以前对系统开发的一些模糊的认识,而且提高了写代码的水平,培养了严谨的工作作风,为今后在工作岗位上用好管好计算机打下了坚实的基础。
在做系统的过程中,我遇到的最大的困难是调程序方面的。在运行程序的过程中经常会出现程序自行中断,需要进行调试的信息。这些信息使得我不得不反复看书,琢磨程序。在一遍一遍的调试之下,程序终于被调通了。那时,我终于可以上上的舒一口气了。
我的系统规模比较小同时由于我的时间和能力等多方面的因素影响,我们的系统也存在一定的缺陷。