图书管理系统.docx
- 文档编号:9252226
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:17.24KB
图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
图书管理系统
二、图书管理系统
图书管理系统需建立2个表:
图书库和读者库。
设计要求与分析
(1)图书数据库的建立:
按书号有序,使用线性表结构(顺序存储或链式存储),用文件保存;
读者数据库的建立:
按借书证号有序,使用线性表结构(顺序存储或链式存储),用文件保存;
如用链式存储结构,图书和读者结点如下定义:
typedefstructtushu//图书结点
{charnumber[15];//书号
charbook[15];//书名
charname[10];//作者
charpup[15];//出版社
intys;//页数
inttal;//藏书数
intkc;//库存
structtushu*next;
}tushu;
typedefstructshu//只有书名的结点
{charbook[15];//书名
structshu*next;
}shu;
typedefstructduzhe//读者结点
{charnumber[15];//借书证号
charname[10];//姓名
inttal;//可借书总数
intyj;//已借书数
shu*s;//所借书链表,由类型为shu的结点组成,初值为NULL
structduzhe*next;
}duzhe;
(2)程序运行后,出现登录界面,(参考通讯录管理系统)选择管理者和普通读者;
(3)选择普通读者只能做查询类工作;
(4)选择管理者需要密码登录,如连续输错3次密码,则被退出系统;管理员可做所有操作。
(5)菜单设计可分图书管理和读者管理(可参考通讯录管理系统),
而每次执行完相应的功能后能返回主菜单。
(a)图书管理可实现:
1.增加图书记录
2.查询图书信息--a.按书号查询b.按书名查询c.按作者查询
3.删除图书记录
4.修改图书信息
5.显示全部图书信息
0.返回上层菜单
(b)读者管理可实现:
1.增加读者记录
2.查询读者信息--a.按借书证号查询b.按姓名查询
3.删除读者记录
4.修改读者信息
5.显示全部读者信息
6.借还书
0.返回上层菜单
根据以上菜单项设计相应的功能函数。
每次执行完相应的功能后能返回主菜单。
分析:
借还书时需输入借书证号和书号,由借书证号可得到读者信息,由书号可得到图书信息,
修改图书的库存,读者的已借书数,借书链表等,借书时还要求已借书数要小于可借书数。
#include
#include"string.h"
typedefstructstudent
{
intnum;
charname[20];
intchineseScore;
intenglishScore;
intmathScore;
floataverage;
intsum;
structstudent*next;
}student,*stuNode;
voidAppendRecord(stuNodeL)
{
stuNodeq,p=L;
while(p->next!
=NULL)p=p->next;
q=(stuNode)malloc(sizeof(student));
printf("请输入学号:
");
scanf("%d",&q->num);
printf("请输入姓名:
");
scanf("%s",q->name);
A:
printf("请输入语文成绩:
");
scanf("%d",&q->chineseScore);
if(q->chineseScore>100||q->chineseScore<0){printf("输入不正确!
请重新输入!
\n");gotoA;}
B:
printf("请输入英语成绩:
");
scanf("%d",&q->englishScore);
if(q->chineseScore>100||q->chineseScore<0){printf("输入不正确!
请重新输入\n!
");gotoB;}
C:
printf("请输入数学成绩:
");
scanf("%d",&q->mathScore);
if(q->chineseScore>100||q->chineseScore<0){printf("输入不正确!
请重新输入\n!
");gotoC;}
q->sum=q->chineseScore+q->englishScore+q->mathScore;
q->average=((float)q->sum)/3;
p->next=q;
q->next=NULL;
printf("添加成功!
\n");
}
voidListRecord(stuNodeL)
{
stuNodeq=L;
if(q->next==NULL)printf("没有任何学生成绩记录!
\n");
else
{
q=q->next;
while(q!
=NULL)
{
printf("学号:
%d姓名:
%s语文:
%d数学:
%d英语:
%d总分:
%d平均分:
%.2f\n",q->num,q->name,q->chineseScore,q->mathScore,q->englishScore,q->sum,q->average);
q=q->next;
}
}
}
voidDeleteRecord(stuNodeL)
{
stuNodep,q=L;
intflag=0;
intdeletenum;
printf("输入要删除的学生学号:
");
scanf("%d",&deletenum);
while(q->next!
=NULL)
{
if(q->next->num==deletenum)
{
p=q->next;
q->next=q->next->next;
free(p);
flag=1;
break;
}
q=q->next;
}
if(flag==0)
printf("没有找到该记录!
\n");
else
printf("删除成功!
");
}
voidModifyRecord(stuNodeL)
{
stuNodeq=L;
intNumToModify,flag=0;
printf("输入要修改的学号:
");
scanf("%d",&NumToModify);
while(q->next!
=NULL)
{
if(q->next->num==NumToModify)
{
printf("请输入学号:
");
scanf("%d",&q->next->num);
printf("请输入姓名:
");
scanf("%s",q->next->name);
printf("请输入语文成绩:
");
scanf("%d",&q->next->chineseScore);
printf("请输入英语成绩:
");
scanf("%d",&q->next->englishScore);
printf("请输入数学成绩:
");
scanf("%d",&q->next->mathScore);
q->next->sum=q->next->chineseScore+q->next->englishScore+q->next->mathScore;
q->next->average=q->next->sum/3;
flag=1;
break;
}
q=q->next;
}
if(flag==1)
printf("修改成功!
\n");
else
printf("找不到该学号!
\n");
}
voidSearchRecord(stuNodeL)
{
stuNodeq=L;
intNumToSearch,flag=0;
printf("输入要查询的学号:
");
scanf("%d",&NumToSearch);
while(q->next!
=NULL)
{
if(q->next->num==NumToSearch)
{
q=q->next;
printf("学号:
%d姓名:
%s语文:
%d数学:
%d英语:
%d总分:
%d平均分:
%.2f\n",q->num,q->name,q->chineseScore,q->mathScore,q->englishScore,q->sum,q->average);
flag=1;
break;
}
q=q->next;
}
if(flag==0)
printf("没有找到该记录!
\n");
}
voidDescendOrderByNum(stuNodeL)
{
stuNodep,q;
inttemp;
chartempstr[20];
for(p=L->next;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->num
{
temp=q->num;
q->num=p->num;
p->num=temp;
temp=q->chineseScore;
q->chineseScore=p->chineseScore;
p->chineseScore=temp;
temp=q->englishScore;
q->englishScore=p->englishScore;
p->englishScore=temp;
temp=q->mathScore;
q->mathScore=p->mathScore;
p->mathScore=temp;
temp=q->average;
q->average=p->average;
p->average=temp;
temp=q->sum;
q->sum=p->sum;
p->sum=temp;
strcpy(tempstr,q->name);
strcpy(q->name,p->name);
strcpy(p->name,tempstr);
}
}
}
}
voidAscendOrderByNum(stuNodeL)
{
stuNodep,q;
inttemp;
chartempstr[20];
for(p=L->next;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->num>q->num)
{
temp=q->num;
q->num=p->num;
p->num=temp;
temp=q->chineseScore;
q->chineseScore=p->chineseScore;
p->chineseScore=temp;
temp=q->englishScore;
q->englishScore=p->englishScore;
p->englishScore=temp;
temp=q->mathScore;
q->mathScore=p->mathScore;
p->mathScore=temp;
temp=q->average;
q->average=p->average;
p->average=temp;
temp=q->sum;
q->sum=p->sum;
p->sum=temp;
strcpy(tempstr,q->name);
strcpy(q->name,p->name);
strcpy(p->name,tempstr);
}
}
}
}
voidDescendOrderBySum(stuNodeL)
{
stuNodep,q;
inttemp;
chartempstr[20];
for(p=L->next;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->sum
{
temp=q->num;
q->num=p->num;
p->num=temp;
temp=q->chineseScore;
q->chineseScore=p->chineseScore;
p->chineseScore=temp;
temp=q->englishScore;
q->englishScore=p->englishScore;
p->englishScore=temp;
temp=q->mathScore;
q->mathScore=p->mathScore;
p->mathScore=temp;
temp=q->average;
q->average=p->average;
p->average=temp;
temp=q->sum;
q->sum=p->sum;
p->sum=temp;
strcpy(tempstr,q->name);
strcpy(q->name,p->name);
strcpy(p->name,tempstr);
}
}
}
}
voidAscendOrderBySum(stuNodeL)
{
stuNodep,q;
inttemp;
chartempstr[20];
for(p=L->next;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->sum>q->sum)
{
temp=q->num;
q->num=p->num;
p->num=temp;
temp=q->chineseScore;
q->chineseScore=p->chineseScore;
p->chineseScore=temp;
temp=q->englishScore;
q->englishScore=p->englishScore;
p->englishScore=temp;
temp=q->mathScore;
q->mathScore=p->mathScore;
p->mathScore=temp;
temp=q->average;
q->average=p->average;
p->average=temp;
temp=q->sum;
q->sum=p->sum;
p->sum=temp;
strcpy(tempstr,q->name);
strcpy(q->name,p->name);
strcpy(p->name,tempstr);
}
}
}
}
voidWriteToFile(stuNodeL)
{
stuNodeq=L;
FILE*fp;
fp=fopen("d:
\\student.txt","w");
if(fp==NULL)
{
printf("无法创建文件!
");
return;
}
while(q->next!
=NULL)
{
fprintf(fp,"%d%s%d%d%d%d%.2f\n",q->next->num,q->next->name,q->next->chineseScore,q->next->mathScore,q->next->englishScore,q->next->sum,q->next->average);
q=q->next;
}
fclose(fp);
printf("写入成功!
");
}
voidReadFromFile(stuNodeL)
{
stuNodep,q=L;
FILE*fp;
fp=fopen("d:
\\student.txt","r");
if(fp==NULL)
{
printf("无法读取文件!
");
return;
}
while(!
feof(fp))
{
while(q->next!
=NULL)q=q->next;
p=(stuNode)malloc(sizeof(student));
fscanf(fp,"%d%s%d%d%d%d%f\n",&p->num,p->name,&p->chineseScore,&p->mathScore,&p->englishScore,&p->sum,&p->average);
q->next=p;
p->next=NULL;
}
fclose(fp);
printf("读入成功!
");
}
intmain(intargc,char*argv[])
{
charoption;
stuNodestuHead;
stuHead=(stuNode)malloc(sizeof(student));
stuHead->next=NULL;
while
(1)
{
printf("ManagementforStudents'scores\n");
printf("1.Appendrecord\n");
printf("2.Listrecord\n");
printf("3.Deleterecord\n");
printf("4.Modifyrecord\n");
printf("5.Searchrecord\n");
printf("6.Sortindescendingorderbysum\n");
printf("7.Sortinascendingorderbysum\n");
printf("8.Sortindescendingorderbynum\n");
printf("9.Sortinascendingorderbynum\n");
printf("W.WritetoaFile\n");
printf("R.ReadfromaFile\n");
printf("0.Exit\n");
printf("Pleaseinputyourchoice:
");
scanf("%c",&option);
switch(option)
{
case'1':
AppendRecord(stuHead);break;
case'2':
ListRecord(stuHead);break;
case'3':
DeleteRecord(stuHead);break;
case'4':
ModifyRecord(stuHead);break;
case'5':
SearchRecord(stuHead);break;
case'6':
DescendOrderBySum(stuHead);break;
case'7':
AscendOrderBySum(stuHead);break;
case'8':
DescendOrderByNum(stuHead);break;
case'9':
AscendOrderByNum(stuHead);break;
case'w':
WriteToFile(stuHead);break;
case'r':
ReadFromFile(stuHead);break;
default:
printf("errorinput\n");
}
system("PAUSE");
}
system("PAUSE");
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统