c语言图书管理论文是考评学生对所学专业知识综合掌握水平的一种有效方式,但毕业论文的撰写与指导环节存在各种各样的问题.如果有一篇毕业论文的例文,那就容易多了。下面是小编为大家精心挑选的,希望大家喜欢!
c语言图书管理论文篇1
课程名称 c语 言 课 程 设 计 教师姓名 樊媛媛 本科生姓名 本科生学 本科生专业
所在院系
类别: 日期:
课程设计评语
注:1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目 录
2
课程设计评语 ...................................................................................................................................... 1
目 录.................................................................................................................................................... 2
................................................................................................................................ 3
................................................................................................................................ 3
.................................................................................................................................... 4
................................................................................................................................ 4
5.算法设计 ........................................................................................................................................ 4
........................................................................................................................................ 5
7.程序运行结果 .............................................................................................................................. 11
.................................................................................................. 14
.................................................................................................................. 15
............................................................................................................................................ 15
1.课程论文题目
图书管理系统
2.程序设计思路
根据要求,图书管理系统以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保持记录以进行删除,查询,借书,还书,退出,添加等等操作;另外还有键盘式旋转菜单以实现功能选择模块。
3.功能模块图
系统功能模块图
4.数据结构设计
先写主函数main (),然后设计个功能选项,用switch选择,然后进入不同模块,进行不同选择,实现不同功能。每个图书信息设置一个结构体,将输入信息存入文件,提供查询功能,还有删除功能以及借书还书功能。每运行一功能后都返回主界面,方便再次选择,还有设置退出模块,方便退出。
5.算法设计
先定义结构体数组struct books,然后设置主界面,主界面出现6个功能选项,分
别是输入sr()
、借书js()、还书hs()、删除sc()、退出tc()、查询cx().各模块设计如下:
输入模块sr(),先调用文件eup,对其进行读取,然后增加,再对其进行保存和调用。其中结构体只输入tsmc图书名称,tsbh图书编号,dj单价,zz作者, 然后自动生成,czzt存在状态,姓名xm,学号xh,性别xb.
查询模块cx(),有选项图书编号和图书名称,然后选择,用if选择,然后用for循环查找,当输入名称与文件中的名称相同时,便显示此信息。
删除模块就是在查找功能的图书后,选择删除,将strcpy将s[i+1]的值赋给s[i]。 借出模块也是在查询的基础上,若s[i]的存在状态为已借出,则显示已借出,无法再借,若未借出,则将s[i]的存在状态czzt变为已借出,然后输入姓名,学号,性别,最后显示出已借出。
还书模块就是在查询的基础上,若s[i]的存在状态为未借出,则无法归还,若借出,则将存在状态变为未借出,然后自动将姓名,学号,性别变为初始值。
退出模块使flag=1,而在main就有bool flag 且main中已令main=0.这样就实现了退出功能。
其中若输入超过选项值后,都会显示输入错误,请重新输入。若字符错误,程序就直接出现错误了。
6.程序代码
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define M 100
struct books
{
char tsmc[12];
int tsbh;
float dj;
char zz[12];
char czzt[12];
char xm[12];
char xb[12];
int xh;
}s[M];
int N;
bool flag;
int main ()
{
int sele;
flag=0;
sele=1;
void sr();
void cx();
void sc();
void js();
void hs();
void tc();
void jsh();
//system ("tsgl");
printf("nn");
printf(" ************************n"); printf(" 1:输入 2:查询 3:删除 n"); printf(" 4:借书 5:还书 0:退出 n"); printf(" ************************n"); while(1)
{
printf("nn请输入功能序号:"); scanf ("%d",&sele);
if(sele>=0 && sele<=5)
{
switch(sele)
{
case 1:sr();break;
case 2:cx();break;
case 3:sc();break;
case 4:js();break;
case 5:hs();break;
case 0:jsh();break;
}
if(flag)
break;
printf("nn");
printf(" ************************n"); printf(" 1:输入 2:查询 3:删除 n"); printf(" 4:借书 5:还书 0:退出 n"); printf(" ************************n");
}
else
{
printf("输入错误请再次输入|nn"); printf("nn");
printf(" ************************n"); printf(" 1:输入 2:查询 3:删除 n"); printf(" 4:借书 5:还书 0:退出 n"); printf(" ************************n"); }
printf("nn让任意键继续n");
}
//wr_file();
}
/******主函数***/
/*********输入*********/
void sr()
{
int n,i;
N=0;
printf("可输入的书本数:");
scanf("%d",&n);
N=n+N;
printf("请输入相关信息:n");
for(i=1;i<=n;i++)
{
printf("图书名称:");
scanf("%s",s[N-n-1+i].tsmc);
printf("图书编号:");
scanf("%d",&s[N-n-1+i].tsbh);
printf("单价:");
scanf("%f",&s[N-n-1+i].dj);
printf("作者:");
scanf("%s",&s[N-n-1+i].zz);
strcpy(s[N-n-1+i].czzt,"未借出");
strcpy(s[N-n-1+i].xm,"无");
}
}
/********查询**********/
void cx()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查询:");
printf("1:图书名称
printf("nn请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:"); 2:图书编号");
scanf("%s",m);
for(i=0;i<N;i++)
if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
}
else if(k==2)
{
printf("请输入图书编号:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
j[t]=i;
t++;
}
}
if(j[0]==-1&&t==0)
printf("没有找到!n");
if(j[0]!=-1 && t!=0)
{
printf("t图书名称 t图书编号 t单价 t作者 t存在状态 t借书人姓名 t性别 t学号n");
for(i=0;i<t;i++)
printf("t%s t%d t%f t%s t%s t%s t%s t%d ", s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
}
}
/********删除模块*********/
void sc()
{
int i,d,k,t=0;
char ms[20];
int ja=-1;
printf("查询:");
printf("1:图书名称 2:图书编号");
printf("nn请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",ms);
for(i=0;i<N;i++)
if(strcmp(ms,s[i].tsmc)==0)
{
ja=i;
break;
}
}
else if(k==2)
{
printf("请输入图书编号:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
ja=i;
break;
}
}
printf("确定删除该图书吗?1表示Yes,其他No"); int p;
scanf("%d",&p);
if(p==1)
printf("Congratulations,删除成功||n");
if(ja!=-1 && p)
{
N=N-1;
for(i=ja;i<N;i++)
{
strcpy(s[i].tsmc,s[i+1].tsmc);
s[i].tsbh=s[i+1].tsbh;
s[i].dj=s[i+1].dj;
strcpy(s[i].zz,s[i+1].zz);
strcpy(s[i].czzt,s[i+1].czzt);
strcpy(s[i].xm,s[i+1].xm);
strcpy(s[i].xb,s[i+1].xb);
s[i].xh=s[i+1].xh;
}
}
else if(ja==-1)
printf ("没有找到!n");
}
/**********借书模块***********/
void js()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查询:");
printf("1:图书名称
printf("nn请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",&m);
for(i=0;i<N;i++)
if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t=t+1;
}
} 2:图书编号");
else if(k==2)
{
printf("请输入图书编号:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
j[t]=i;
t++;
}
}
if(j[0]==-1&&t==0)
printf("没有找到!n");
strcpy(s[j[i]].czzt,"已借出");
printf("此书已借出n");
if(j[0]!=-1&&t!=0&&s[j[i]].czzt==" 未借出")
{
printf("%s %d %f %s %s %s %s %d ",
s[j[i]].tsmc,s[j[i]].tsbh,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh); }
printf("1:确定借阅 2:退出n");
scanf("%d",&k);
switch(k)
{
case 1:printf("请输入学号:n");
scanf("%d",&s[j[i]].xh);
printf("请输入姓名:n");
scanf("%s",&s[j[i]].xm);
printf("请输入性别:n");
scanf("%s",&s[j[i]].xb);
strcpy(s[j[i]].czzt,"已借出");
printf("已借出,按任意键继续n");
//getch();
case 2:break;
}
}
/*************还书模块***************/
void hs()
{
int i,j[100]={-1},d,k,t=0;
char m[20];
printf("查询:");
printf("1:图书名称 2:图书编号");
printf("nn请输入查询选项:");
scanf("%d",&k);
if(k==1)
{
printf("请输入图书名称:");
scanf("%s",&m);
for(i=0;i<N;i++)
if(strcmp(m,s[i].tsmc)==0)
{
j[t]=i;
t++;
break;
}
}
else if(k==2)
{
printf("请输入图书编号:");
scanf("%d",&d);
for(i=0;i<N;i++)
if(d==s[i].tsbh)
{
j[t]=i;
t++;
break;
}
}
if(t==0)
printf("没有找到!n");
else
{
printf("%s %f %s %s %s %s %d n",
s[j[i]].tsmc,s[j[i]].dj,s[j[i]].zz,s[j[i]].czzt,s[j[i]].xm,s[j[i]].xb,s[j[i]].xh);
printf("1:确定归还 2:退出n");
int p;
scanf("%d",&p);
if(p==1)
{
strcpy(s[j[i]].czzt,"未借出");
strcpy(s[j[i]].xm,"无");
s[j[i]].xh=0;
printf("已归还,按任意键继续n");
}
//getch();
}
}
/*************结束模块***************/
void jsh()
{
flag=1;
}
7.程序运行结果
11
12
13
各模块均能执行。
8.编程中遇到的困难及解决方法
14
做程序时,文件函数无法实现,于是找了同学跟我讲解,看书还有就是看例子等等,最终找出了个解决方案。还有系统最初运行时有很多不尽人意的,比如我希望每次运行后都出现主界面,这样方便选择。如果出现错误的话,要显示出错误原因,并给出提示,我解决了几个这样的问题,比如借书时如果已借出就要显示出“已借出,请重新选择”,如果没有,就显示无法找到,并显出主菜单,再次选择。
9.总结心得及良好建议
对于程序的设计,必须先理解c语言的一些知识,用起来才会得心应手,最好之前就想好大致用什么算法去实现需要的程序。对于举一反三的内容不是用来抄的,我们必须要先对其理解,这样才能写好一个程序。程序中最复杂的感觉是调试,有时候自己有很多习惯性的错误真的很难找到,所有要形成好的习惯。还有就是要养成好的思维,要多练习,不能眼高手低。
10.致谢
c语言图书管理论文篇2
学 号:
班 级:计
姓 名:陈
完成时间:
科083 阳 光
一、 需求分析
1. 依据题目要求以及现实中图书馆的需求,应将该系统分为两大模块:图书管理和会
员管理。图书管理模块中包括对图书的增加、修改、删除、查询、统计等操作,以及对图书借入借出服务。会员管理包括对会员卡号的申请、删除、统计等操作。 2. 界面应该具有友善、直观、易操作等特点,本系统采用数字输入选择操作。 二、 概要设计 1. 整体设计
经过需求分析,本系统分为两大模块:书籍管理模块和会员管理模块。但是从易用性方面考虑,将书籍管理模块中的借书和还书模块放到主界面中。结构图如下所示:
2. 详细设计
2.1结构体设计
流程图 struct student /*定义会员类型,用于存放借出的书籍*/ {
int cardnum; //卡号
char lendbook[10]; //借书数组 最多借书十本 }student[1000];
struct book /*定义书的类型*/ { int booknum; //书号 char bookname[20]; //书名 char author[10]; //作者
int bookcount; //书的剩余数量 }book[1000];
struct card /*借书卡的数据类型*/
{
int cardnum; //卡号
char studentname[10];//会员姓名
char studentclass[10]; //会员班级
}card[1000];
2.2 主函数
主函数要求设计比较简洁,只提供设输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。
HWND hwnd=GetForegroundWindow();
SetWindowText(hwnd,"★图 书 管 理 系 统★");
int ch1,ch2,ch3;
do
{ SetConsoleTextAttribute(h,FOREGROUND_RED);//设置字体颜色为红色
printf("ntt ★欢★迎★进★入★图★书★管★理★系★统★nn");
printf("t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※n"); printf("t ※ ※n"); printf("t ※ ★ 图 书 管 理 系 统 ★ ※n"); printf("t ※ ※n"); printf("t ※ 1:<借书系统> 2:<还书系统> ※n"); printf("t ※ 3:<会员管理> 4:<书籍管理> ※n"); printf("t ※ 0:<退出> ※n"); printf("t ※ ※n");
printf("t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※nnn"); printf("tt请选择操作类型(0-4):");
scanf("%d",&ch1);
switch(ch1)
{ case 1:lendbook();break;
case 2:returnbook();break;
case 3:{
do
{SetConsoleTextAttribute(h, FOREGROUND_GREEN);//设置字体颜色为绿色
printf("nn");
printf("t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※n");
printf("t ※ ※n");
printf("t ※ ★ 欢 迎 进 入 会 员 管 理 系 统 ★ ※n");
printf("t ※ ※n");
printf("t ※ 1:<申请新卡> 2:<删除卡号> ※n"); printf("t ※ 3:<借书统计> 4:<会员统计> ※n"); printf("t ※ 0:<返回> ※n");
printf("t ※ ※n");
printf("t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※nnn");
printf("tt请选择操作类型(0-4):");
scanf("%d",&ch3);
switch(ch3)
{ case 1:addcard();break;
case 2:delcard();break;
case 3:lendcount();break;
case 4:cardcount();break;
case 0:break;
default:printf("ntt无效操作,按任意键返回...n");getch();break; } }while(ch3!=0);
}break;
case 4:{
do {
SetConsoleTextAttribute(h, FOREGROUND_GREEN);//设置字体颜色为绿色
printf("nn");
printf("t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※n"); printf("t ※ ※n"); printf("t ※ ★ 欢 迎 进 入 书 籍 管 理 系 统 ★ ※n"); printf("t ※ ※n"); printf("t ※ 1:<增加图书> 2:<删除图书> ※n"); printf("t ※ 3:<查询图书> 4:<书籍统计> ※n"); printf("t ※ 5:<修改图书资料> 0:<返回主菜单> ※n"); printf("t ※ ※n"); printf("t ※※※※※※※※※※※※※※※※※※※※※※※※※※※※nnn");
printf("tt请选择操作类型(0-5):");
scanf("%d",&ch2);
switch(ch2)
{ case 1:addbook();break;
case 2:delbook();break;
case 3:searchbook();break;
case 4:bookcount();getch();break;
case 5:modifybook();break;
case 0:break;
default:printf("ntt无效操作,按任意键返回...n");getch();break;
}
}while(ch2!=0);
}break;
case 0:break;
default:printf("ntt无效操作,按任意键返回...n");getch();break;
}
}while(ch1!=0);
2.3 借书模块
void lendbook() { //借书功能函数
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, FOREGROUND_GREEN); FILE *fp,*fp2;
int i,n;
int cardnum;
printf("ntt请你输入你的卡号: "); scanf("%d",&cardnum); fp=fopen("card.txt","r"); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) { if(card[i].cardnum==cardnum) { n=i; fclose(fp); printf("ntt请输入你要借阅的书的名字: "); scanf("%s",student[n].lendbook); fp=fopen("book.txt","r"); {
回...n");
{ if(book[i].bookcount==0) { printf("tt对不起,此书有人借出,请借其他书.按任意键返 fclose(fp); getch(); return; }else{ //book[i].bookcount --; fclose(fp); } fp=fopen("record.txt","a+"); //以读写方式打开record.txt student[n].cardnum=cardnum; fwrite(&student[n],sizeof(struct student),1,fp); fclose(fp);
fp=fopen("book.txt","r"); fp2=fopen("booktemp.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].bookcount--; 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("booktemp.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("booktemp.txt","w"); fclose(fp2); printf("ntt借书完毕,按任意键返回..."); getch(); return; } } printf("ntt很抱歉,不存在这本书,按任意键返回..."); fclose(fp); getch(); return; } }
printf("ntt你的卡号不存在,请申请新卡,按任意键返回..."); fclose(fp);
getch();
}
2.4 还书模块
void returnbook() /*还书函数*/
{
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, FOREGROUND_GREEN);//设置字体颜色为绿色
FILE *fp,*fp2; /*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
int i,temp;
int cardexit=0,bookexit=0;//卡号 书籍是否存在(借阅)标志 存在(借阅)为1 不存在为0
int cardnum;
char lendbook[10];
printf("ntt请你输入你的卡号: ");
scanf("%d",&cardnum);
fp=fopen("card.txt","r"); /*读取卡号记录*/ for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) /*for循环判断卡号是否存在*/ { if(card[i].cardnum==cardnum) /*卡号存在,进入下一循环*/ { cardexit=1; temp=i; fclose(fp); printf("ntt请输入你要还的书的名字: "); scanf("%s",lendbook); fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++) /*判断是否借阅了输入的书*/
{
if(student[i].lendbook==lendbook) /*借阅了该书,进入下一循环,否则出错显示*/
{
bookexit=1;
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("booktemp.txt","w");
for(i=0;fread(&student[i],sizeof(struct student),1,fp)!=0;i++)
{
if(student[i].lendbook==lendbook)
{
continue; /*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(struct student),1,fp2); /*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("booktemp.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("booktemp.txt","w"); /*清临时文件的记录*/ fclose(fp2); fp=fopen("book.txt","r"); fp2=fopen("booktemp.txt","w");
for(i=0;fread(&book[i],sizeof(struct book),1,fp2)!=0;i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==temp)
{
book[i].bookcount++;
fwrite(&book[i],sizeof(struct book),1,fp); /*将还的书的可借数量加1*/
continue;
}
fwrite(&book[i],sizeof(struct book),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("booktemp.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("booktemp.txt","w"); /*清临时文件*/
fclose(fp2);
printf("ntt还书完毕,按任意键返回...n");
}
}
fclose(fp);
}
}
fclose(fp);
if(cardexit==0)
printf("ntt系统没此卡号,请和管理员联系,按任意键返回...n");/*出错提示*/
else if(bookexit==0)
printf("ntt你没有借这本书,按任意键返回...n"); /*出错提示*/ getch();
}
2.5 会员管理模块
会员管理有四个功能:申请新卡、删除卡号、借书统计、卡号统计,分别对应以下四个函数:
void addcard()
{ //增加新卡函数
FILE *fp;
int i=0,tempcard,temp=0;
fp=fopen("card.txt","a+");
printf("ntt请输入卡号:"); scanf("%d",&tempcard); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) //判断卡号是否存在 if(tempcard==card[i].cardnum) temp=1; if(temp==1) //如果卡号存在,返回 { printf("ntt此卡号已经存在,按任意键返回..."); getch(); } else if(temp==0){ //如果卡号不存在,继续下面操作 card[i].cardnum=tempcard; printf("ntt请输入学生姓名:"); scanf("%s",card[i].studentname);
printf("ntt请输入班级:");
scanf("%s",&card[i].studentclass);
fwrite(&card[i],sizeof(struct card),1,fp);
fclose(fp);
printf("ntt输入完毕,任意键返回...n");
getch();
}
}
void delcard()
{ //删除卡号记录函数
FILE *fp,*fp2;
int i;
int cardnum;
char choice;
fp=fopen("card.txt","r");
fp2=fopen("booktemp.txt","w");
printf("ntt提示:如果你输入的卡号存在,系统自动删除该信息.");
printf("ntt如果不存在,系统不做任何改动."); printf("ntt请输入你要删除的卡号: "); scanf("%d",&cardnum); for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++) { if(card[i].cardnum!=cardnum) { fwrite(&card[i],sizeof(struct card),1,fp2); } } fclose(fp); fclose(fp2); printf("ntt是否真的要删除该卡?删除后该书籍的所有信息将无法恢复<Y/N>:"); scanf("%s",&choice); if(choice=='y'||choice=='Y') { fp=fopen("card.txt","w"); fp2=fopen("booktemp.txt","r"); for(i=0;fread(&card[i],sizeof(struct card),1,fp2)!=0;i++) { fwrite(&card[i],sizeof(struct card),1,fp); } fclose(fp); fclose(fp2); fp2=fopen("booktemp.txt","w"); fclose(fp2); printf("tt按任意键返回...n"); getch(); } else {
printf("tt按任意键返回...n");
getch();
}
}
int 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("tt卡号:%d 借出的书籍:%s n",student[i].cardnum,student[i].lendbook); n=n+1; } fclose(fp);
printf("tt目前共有%d本书借出n",n);
printf("tt按任意键返回...n");
getch();
return n;
}
void cardcount()
{
//会员卡号统计函数 FILE *fp; int i,n=0; fp=fopen("card.txt","r");
printf("tt卡号 姓名 班级n");
for(i=0;fread(&card[i],sizeof(struct card),1,fp)!=0;i++)
{
printf("ntt%-10d%-10s%-2sn",card[i].cardnum,card[i].studentname,card[i].studentclass); n=n+1;
}
fclose(fp);
printf("ntt目前共有%d个会员n",n);
printf("tt按任意键返回...n");
getch();
}
2.6书籍管理模块
书籍管理模块有五个功能:增加图书、删除图书、查询图书、书籍统计、修改图书资料。分别对应下面五个函数:
void addbook()
{
//增加新书函数 FILE *fp; int i=1,temp=0,booktemp; char choice='y'; fp=fopen("book.txt","a+"); while(choice=='y'||choice=='Y') { printf("ntt请输入书的序号:"); scanf("%d",&booktemp); for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++) //判断卡号是否存在 if(booktemp==book[i].booknum) { temp=1;
choice='n'; } // scanf("%d",&book[i].booknum); if(temp==1) { printf("ntt此书号已经存在,按任意键返回..."); getch(); } else { printf("ntt请输入书名:"); scanf("%s",book[i].bookname); printf("ntt请输入书的作者:"); scanf("%s",book[i].author); printf("ntt请设定书可借数量:"); scanf("%d",&book[i].bookcount); fwrite(&book[i],sizeof(struct book),1,fp);
printf("ntt是否要输入下本书(Y or N):");
scanf("%s",&choice);
}
}
fclose(fp);
}
void delbook()
{ //删除图书函数
FILE *fp,*fp2;
int i;
char bookname[10],choice;
fp=fopen("book.txt","r");
fp2=fopen("booktemp.txt","w");
printf("ntt提示:如果你输入的书名存在,系统自动删除该信息!ntt如果不存在,系统不做任何改动!");
printf("ntt请输入你要删除的书名:");
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("ntt是否真的要删除该书籍?删除后该书籍的所有信息将无法恢复<Y/N>:"); scanf("%s",&choice);
if(choice=='y'||choice=='Y') { fp=fopen("book.txt","w"); fp2=fopen("booktemp.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("booktemp.txt","w"); fclose(fp2);
printf("ntt按任意键返回...n");
getch();
}
else
{
printf("ntt按任意键返回...n");
getch();
}
}
void searchbook()
{ //图书查询系统函数
int ch5;
do
{ HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(h, FOREGROUND_GREEN);//设置字体颜色为绿色 printf("ntt1:<按书名查找>");
printf("tt2:<按作者查找>");
printf("ntt3:<按书号查找>");
printf("tt0:<返回主菜单>");
printf("nntt请输入要选择的操作(0-3):");
scanf("%d",&ch5);
switch(ch5)
{
case 1:findbook();getch();break;
case 2:findbook1();getch();break;
case 3:
{findbook2();
getchar();
}break;
case 0: break;
} default:printf("tt无效操作,按任意键返回...n");getch();break; } }while(ch5!=0);
int findbook() //findbook1() findbook2()分别为按作者和书号查询,和此函数类似,再次不
{ //按书名查阅书籍信息 //在此不再一一列出,具体请参考源程序
FILE *fp;
char bookname[10];
int i;
fp=fopen("book.txt","r");
printf("ntt请输入你要查找的书名:");
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].bookcount!=0)
{
printf("ntt这本书的详细资料是:%d %s %s 此书现在还可借。ntt按任意键返回...n",book[i].booknum,book[i].bookname,book[i].author);
}
else {
printf("ntt这本书已经借完!n");
fclose(fp);
return 0;
}
fclose(fp);
return 0;
}
}
printf("ntt没有你要查询的书籍,按任意键返回...n");
fclose(fp);
return 0;
}
void bookcount()
{ //书籍统计函数
FILE *fp;
int i,n=0;
fp=fopen("book.txt","r");
printf("tt书号 书名 作者 剩余数量n");
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].author)!=0) {
printf("tt%-10d%-20s%-10s%-2dn",book[i].booknum,book[i].bookname,book[i].author,book[i].bookcount);
n=n+1;
}
}
fclose(fp);
printf("ntt目前共有%d本书",n);
printf("tt按任意键返回...n");
}
void modifybook()
{ //修改图书信息
FILE *fp,*fp2;
char bookname[20],choice;
int i;
fp=fopen("book.txt","r");
fp2=fopen("booktemp.txt","w");
printf("ntt请你输入要修改的书籍的书字:");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(struct book),1,fp)!=0;i++)
{
//printf("测试");
if(strcmp(bookname,book[i].bookname)==0)
{
printf("tt你所要修改的书的资料如下,请选择你要修改的内容n"); printf("tt序号:〈%d〉 书名:〈%s〉 作者:〈%s〉
n",book[i].booknum,book[i].bookname,book[i].author);
printf("tt1:修改书的序号n");
printf("tt2:修改书名n");
printf("tt3:修改作者n");
printf("tt4: 修改书的借出状态n");
printf("tt请输入选择的操作(1-4):");
scanf("%s",&choice);
switch(choice)
{
case '1':
{
printf("ntt请输入新的序号: ");
scanf("%d",&book[i].booknum);
fwrite(&book[i],sizeof(struct book),1,fp2);
}break;
case '2':
} { printf("ntt请输入新的书名: "); scanf("%s",book[i].bookname); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '3': { printf("ntt请输入书的作者: "); scanf("%s",book[i].author); fwrite(&book[i],sizeof(struct book),1,fp2); }break; case '4': { printf("ntt请输入书剩余数量: "); scanf("%d",book[i].bookcount ); fwrite(&book[i],sizeof(struct book),1,fp2); }break; default:printf("tt无效操作n");break; } continue; } fwrite(&book[i],sizeof(struct book),1,fp2); } fclose(fp); fclose(fp2); fp=fopen("book.txt","w"); fp2=fopen("booktemp.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("booktemp.txt","w"); fclose(fp2); printf("tt很抱歉,不存在要修改的图书!n"); getchar();
三、 编码测试
1. 主界面
2. 会员管理界面
从主界面选择操作类型3 进入会员管理界面:
3.书籍管理界面
从主界面选择操作类型4进入书籍管理界面:
注:由于篇幅有限,其他功能不再一一截图,更多详细情况请参考附件。
四、 设计总结
经过几天的努力,图书管理系统总算可以正常运行了,功能也算基本完善。实习过程中也遇到了很多的困难,但通过图书馆和上网查阅资料,总算得以一一解决。最后感谢我的队友安龙飞和兰其海的对此的大力帮助。
五、 源码
请参考附件