这篇文章主要为大家详细介绍了C语言实现简单的图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了C语言实现简单图书管理系统的具体代码,供大家参考,具体内容如下
代码:
/*
课程设计项目名称:图书查询系统
作者:施瑞文
时间:2018.3.4
*/
# includestdio.h
#includestring.h
#includewindows.h
#includeconio.h
#includestdlib.h
#定义sizeof(结构书)
结构书//图书信息
{
字符数[10];//登录号
char name[10];//书名
茶作者[10];//作者名
字符类型[10];//类型
char publish[10];//出版单位
充电时间[8];//出版时间
浮动价格;//价格
int num//数量
int x;
结构书*下一页//指针域
};
typedef结构书书;
typedef书*书;
void隐藏光标();//隐藏光标
void toxy(int x,int y);//将光标移动到x,Y坐标处
空颜色(短x);//设置颜色
void over();//退出
void menu();//菜单
void input_book()。//图书入库
void save_book(图书p);//将图书信息存入文件
void find _ book();//查询
void print _ book();//图书总览
void del _ book();//删除图书
void amend _ book();//修改信息
书ss();
void find _ name _ book();//按书名查询
void find _ author _ book();//按作者查询
void find _ number _ book();//按登录号查询
void find _ publish _ book();//按出版社查询
void fuzzy _ search();//模糊查找
void HideCursor() //隐藏光标
{
控制台_光标_信息光标_信息={1,0}。
SetConsoleCursorInfo(GetStdHandle(STD _ OUTPUT _ HANDLE),cursor _ info);
}
空心颜色(短x)
{
if(x=0x=15)
{
SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE),x);
}
其他
{
SetConsoleTextAttribute(GetStdHandle(STD _ OUTPUT _ HANDLE),x);
}
}
void toxy(int x,int y) //将光标移动到x,Y坐标处
{
COORD pos={ x,y };
HANDLE Out=GetStdHandle(STD _ OUTPUT _ HANDLE);
SetConsoleCursorPosition(Out,pos);
}
void menu() //菜单
{
做
{
系统(“cls”);//清屏
隐藏光标();//隐藏光标
颜色(15);//设置一个好看的颜色
char t;
toxy(50,5);//将光标移动到(50,5)坐标处
printf('图书查询管理系统');
toxy(48,8);
printf('| 1 .图书入库|');
toxy(48,10);
printf('| 2 .修改信息|');
toxy(48,12);
printf('| 3 .删除信息|');
toxy(48,14);
printf('| 4 .图书查询|');
toxy(48,16);
printf('| 5 .图书总览|');
toxy(48,18);
printf('| 6 .退出软件|');
t=getch();//不回显函数
开关(吨)
{
事例“1”:input _ book();打破;
案例" 2 ":amend _ book();打破;
案例" 3 ":del _ book();打破;
案例“4”:find _ book();打破;
案例" 5 ":print _ book();打破;
案例“6”:over();打破;
默认:断开
}
} while(1);
}
书ss() //将文件中的内容读出到链表中,返回值为表头地址
{
FILE * fp//文件指针
int n=0;
书头=空;
书p2,p,pr=空
fp=fopen('mybook ',' ab ');//以只读的方式打开文件
if(fp==NULL)
{
printf('无法打开文件\ n’);
}
而(!feof(fp)) //判断文件位置标志是否移动到文件末尾
{
n;
p=(book)malloc(N);//向内存申请一段空间
fread(p,N,1,FP);//将复调钢琴所指向的文件中的内容赋给p
如果(n==1)
{
head=p;
p2=p;
}
else //创建链表
{
pr=p2
p2-next=p;
p2=p;
}
}
如果(公关!=空)
pr-next=NULL;
其他
head=NULL
fclose(FP);//关闭文件
回程头;//返回头指针
}
void input_book() //图书录入
{
做
{
系统(“cls”);
颜色(10);
char t;
书p;
p=(book)malloc(N);//申请空间
//输入图书信息
toxy(48,8);
printf('请输入图书登录号(小于10位数):');
scanf('%s ',p-number);getchar();
toxy(48,10);
printf('请输入书名(小于10位数):');
scanf('%s ',p-name);getchar();
toxy(48,12);
Printf('请输入作者姓名(少于10位):');
scanf('%s ',p-author);getchar();
toxy(48,14);
Printf('请输入图书类别(少于10位):');
scanf('%s ',p型);getchar();
toxy(48,16);
Printf('请输入图书出版单位(少于10位):');
scanf('%s ',p-publish);getchar();
toxy(48,18);
Printf('请输入图书出版时间(少于8位):');
scanf('%s ',p-time);getchar();
toxy(48,20);
Printf('请输入图书价格:');
scanf('%f ',p-price);getchar();
toxy(48,22);
Printf('请输入图书数量:');
scanf('%d ',p-num);
save _ book(p);
toxy(48,24);
Printf('保存.');
睡眠(500);//暂停0.5秒
系统(“cls”);
toxy(46,8);
printf('-');
toxy(46,9);
printf(' | | ');
toxy(46,10);
Printf('|保存成功!你想继续吗?|');
toxy(46,12);
Printf('| 1。是2。没有| ');
toxy(46,13);
printf(' | | ');
toxy(46,14);
printf('-');
而(1) //使用无限循环可以有效防止其他键的干扰。
{
t=getch();
if(t=='1 ')
{
打破;
}
else if(t=='2 ')
{
menu();
}
}
} while(1);
}
voi Modify _ book()//修改图书信息
{
做
{
系统(“cls”);
颜色(10);
书头,p;
int i=11,j=0,x;
char ch,t;
FILE * fp//文件指针
char _ name[10];
字符数[10];//登录号
char name[10];//书名
char作者[10];//作者姓名
字符类型[10];//类型
char publish[10];//出版公司
充电时间[8];//发布时间
浮动价格;//价格
int num//数量
head=ss();
p=头部;
toxy(48,10);
Printf('请输入要修改的书名:');
获取(_ name);
而(p!=NULL) //将p-x初始化为0
{
p-x=0;
p=p-next;
}
p=头部;//让P再次指向头
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
toxy(20,8);
printf('-');
toxy(20,9);
Printf('登录号、书名、作者姓名、图书类别、出版单位、出版时间、价格、数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULLstrcmp(p-name,_name)==0)
{
toxy(20,I);
j;
printf('%d:%ssss s s %.2fd\n',j,p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
p-x=j;//标注符合查询条件的节点
我;
}
p=p-next;
}
If(j==0) //如果j=0,则不进入前一个搜索周期,即没有找到对应的信息。
{
toxy(50,I);
Printf('没有找到对应的信息!(按0返回,按1再次搜索)’);
而(1) //无限循环是为了防止0和1以外的其他键的干扰。
{
ch=getch();
if(ch=='0 ')
{
menu();打破;
}
else if(ch=='1 ')
{
打破;
}
}
If(ch=='1') //如果输入ch等于1,结束这个循环。
继续;
}
while(1)
{
toxy(45,I);
Printf('请输入您要修改的书号:');
scanf('%d ',x);getchar();
if(xj||x==0)
{
toxy(45,I);
Printf('输入错误,请重新输入!');
睡眠(500);
}
其他
{
打破;
}
}
p=头部;//让P再次指向头
而(p!=NULLp-x!=x) //遍历链表查询符合条件的节点。
{
p=p-next;
}
If(p) //如果p不为空
{
系统(“cls”);
//输入要修改的信息
toxy(48,8);
Printf('请输入图书存取号(少于10位):');
scanf('%s ',编号);getchar();strcpy(p-number,number);
toxy(48,10);
Printf('请输入书名(少于10位):');
scanf('%s ',名称);getchar();strcpy(p-name,name);
toxy(48,12);
Printf('请输入作者姓名(少于10位):');
scanf('%s ',作者);getchar();strcpy(p-author,作者);
toxy(48,14);
Printf('请输入图书类别(少于10位):');
scanf('%s ',类型);getchar();strcpy(p型,type);
toxy(48,16);
printf('请输入图书出版单位(小于10位数):');
scanf('%s ',发布);getchar();strcpy(p-publish,publish);
toxy(48,18);
printf('请输入图书出版时间(小于8位数):');
scanf('%s ',时间);getchar();strcpy(p-time,time);
toxy(48,20);
printf('请输入图书价格:');
扫描f('%f ',价格);getchar();p-价格=价格;
toxy(48,22);
printf('请输入图书数量:');
scanf('%d ',编号);getchar();p-num=num;
}
颜色(7);
toxy(46,8);
printf('-');
toxy(46,9);
printf(' | | ');
toxy(46,10);
printf('|是否确认修改?|');
toxy(46,12);
printf('| 1 .是2.否|');
toxy(46,13);
printf(' | | ');
toxy(46,14);
printf('-');
while(1) //利用死循环防止其他按键干扰
{
t=getch();
if(t=='1 ')
{
打破;
}
else if(t=='2 ')
{
menu();
}
}
系统(“cls”);
toxy(46,10);
printf('正在修改,请稍后.');
fp=fopen('mybook ',' WB ');//以只写的方式打开名为我的书的二进制文件,打开的同时清空文件中的内容
if(fp==NULL)
{
printf('无法打开文件');
}
if(fwrite(head,N,1,fp)!=1) //将头写入复调钢琴所指向的文件中
{
printf('写入错误!');
}
fclose(FP);//关闭文件
如果(头!=NULL) //如果头不为空
{
p=head-next;//让p指向第二个结点
fp=fopen('mybook ',' ab ');//以追加的方式打开文件
if(fp==NULL)
{
printf('无法打开文件');
}
而(p!=空)
{
if(fwrite(p,N,1,fp)!=1)//将p写入复调钢琴所指向的文件中
{
printf('写入错误!');
}
p=p-next;
}
fclose(FP);//关闭文件
}
睡眠(500);//暂停0.5秒
系统(“cls”);
toxy(46,10);
printf('修改成功!即将自动返回主菜单.');
睡眠(500);
打破;
} while(1);
}
void del_book() //删除信息
{
做
{
系统(“cls”);
颜色(9);
文件* fp
书头,p,pre=NULL
int j=0,x,i=11
char name[10];
char t,c,ch;
head=ss();//调用函数,返回表头地址
toxy(48,10);
printf('请输入你要删除的图书的书名:');
scanf('%s ',名称);
p=头部;
而(p!=空)
{
p-x=0;
p=p-next;
}
p=头部;
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书信息******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULLstrcmp(p-name,name)==0)
{
toxy(20,I);
j;
printf('%d:%ssss s s %.2fd\n',j,p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
p-x=j;
我;
}
p=p-next;
}
if(j==0) //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息
{
toxy(50,I);
printf('没有找到相应的信息!(按0返回,按一重新搜索)');
while(1) //死循环是为了防止除0和一的其他按键干扰
{
ch=getch();
if(ch=='0 ')
{
menu();打破;
}
else if(ch=='1 ')
{
打破;
}
}
if(ch=='1') //如果输入的荣誉勋爵等于1,则结束本次循环
继续;
}
while(1)
{
toxy(45,I);
printf('请输入您要删除的图书的编号:');
scanf('%d ',x);getchar();
if(xj||x==0)
{
toxy(45,I);
printf('输入错误,请重新输入!');
睡眠(500);
}
其他
{
打破;
}
}
颜色(7);
toxy(46,8);
printf('-');
toxy(46,9);
printf(' | | ');
toxy(46,10);
printf('|是否确认删除?|');
toxy(46,12);
printf('| 1 .是2.否|');
toxy(46,13);
printf(' | | ');
toxy(46,14);
printf('-');
while(1)
{
t=getch();
if(t=='1 ')
{
打破;
}
else if(t=='2 ')
{
menu();
}
}
p=头部;
而(p!=NULLp-x!=x)
{
pre=p;
p=p-next;
}
如果(p!=空)
{
if(pre==NULL)
{
head=head-next;
}
其他
{
pre-next=p-next;
}
}
免费(p);
fp=fopen('mybook ',' WB ');
if(fp==NULL)
{
printf('无法打开文件');
}
if(fwrite(head,N,1,fp)!=1)
{
printf('写入错误!');
}
fclose(FP);
如果(头!=空)
{
p=head-next;
fp=fopen('mybook ',' ab ');
if(fp==NULL)
{
printf('无法打开文件');
}
而(p!=空)
{
if(fwrite(p,N,1,fp)!=1)
{
printf('写入错误!');
}
p=p-next;
}
fclose(FP);
}
系统(“cls”);
toxy(46,10);
printf('正在删除,请稍后.');
睡眠(500);
系统(“cls”);
toxy(46,8);
printf('-');
toxy(46,9);
printf(' | | ');
toxy(46,10);
printf('|删除成功,是否继续?|');
toxy(46,12);
printf('| 1 .是2.否|');
toxy(46,13);
printf(' | | ');
toxy(46,14);
printf('-');
while(1)
{
c=getch();
if(c=='1 ')
{
打破;
}
else if(c=='2 ')
{
menu();
}
}
} while(1);
}
void print_book() //图书总览
{
系统(“cls”);
颜色(6);
书头,p;
int i=11
int sum=0;
head=ss();
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书总览******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
if(head==NULL)
{
toxy(45,11);
printf('书库暂时没有书哦~赶快去添加几本吧^_^(按任意键返回)');
getch();
menu();
}
p=头部;
而(p!=空)
{
toxy(20,I);
printf('%ssss s s %.2fd\n',p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
我;
sum=p-num;//计算图书总量
p=p-next;
}
toxy(48,7);
printf('图书总量为:%d ',sum);
toxy(45,I);
printf('按任意键返回');
getch();//不回显函数
}
void find_book() //查询图书
{
做
{
系统(“cls”);//清屏
颜色(8);
char t;
toxy(50,5);
printf('图书查询');
toxy(48,8);
printf('| 1 .书名查询|');
toxy(48,10);
printf('| 2 .作者查询|');
toxy(48,12);
printf('| 3 .登录号查询|');
toxy(48,14);
printf('| 4 .出版社查询|');
toxy(48,16);
printf('| 5 .模糊查询|');
toxy(50,18);
printf('按0返回主菜单');
t=getch();
开关(吨)
{
事例“0”:menu();打破;
事例“1”:find _ name _ book();打破;
案例“2”:find _ author _ book();打破;
案例“3”:find _ number _ book();打破;
案例“4”:find _ publish _ book();打破;
案例“5”:fuzzy _ search();打破;
默认:断开
}
} while(1);
}
void find_name_book() //按名字查询
{
系统(“cls”);
颜色(8);
书头,p;
int i=11
head=ss();
char name[10];
toxy(48,8);
printf('请输入您要查询图书的书名:');
获取(名称);
toxy(48,10);
printf('正在查询.');
睡眠(500);
p=头部;
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书总览******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULLstrcmp(p-name,name)==0)
{
toxy(20,I);
printf('%ssss s s %.2fd\n',p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
我;
}
p=p-next;
}
toxy(45,I);
printf('按任意键返回!');
getch();
find _ book();
}
void find_author_book() //按作者名查询
{
系统(“cls”);
颜色(8);
书头,p;
int i=11
head=ss();
茶作者[10];
toxy(48,8);
printf('请输入您要查询图书的作者名:');
获取(作者);
toxy(48,10);
printf('正在查询.');
睡眠(500);
p=头部;
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书总览******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULLstrcmp(p-author,author)==0)
{
toxy(20,I);
printf('%ssss s s %.2fd\n',p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
我;
}
p=p-next;
}
toxy(45,I);
printf('按任意键返回!');
getch();
find _ book();
}
void find_number_book() //按图书编号查询
{
系统(“cls”);
颜色(8);
书头,p;
int i=11
head=ss();
字符数[10];
toxy(48,8);
printf('请输入您要查询图书的登录号:');
获取(数字);
toxy(48,10);
printf('正在查询.');
睡眠(500);
p=头部;
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书总览******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULLstrcmp(p-number,number)==0)
{
toxy(20,I);
printf('%ssss s s %.2fd\n',p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
我;
}
p=p-next;
}
toxy(45,I);
printf('按任意键返回!');
getch();
find _ book();
}
void find_publish_book() //按出版商查询
{
系统(“cls”);
颜色(8);
书头,p;
int i=11
head=ss();
char publish[10];
toxy(48,8);
printf('请输入您要查询图书的出版社:');
获取(发布);
toxy(48,10);
printf('正在查询.');
睡眠(500);
p=头部;
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书总览******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULLstrcmp(p-publish,publish)==0)
{
toxy(20,I);
printf('%ssss s s %.2fd\n',p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
我;
}
p=p-next;
}
toxy(45,I);
printf('按任意键返回!');
getch();
find _ book();
}
空的模糊搜索()//模糊查询
{
系统(“cls”);
颜色(8);
书头,p;
int i=11
head=ss();
茶信息[10];
toxy(48,8);
printf('请输入您要查询图书的信息:');
获取(信息);
toxy(48,10);
printf('正在查询.');
睡眠(500);
p=头部;
toxy(20,5);
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '图书总览******************************************************');
toxy(20,8);
printf('-');
toxy(20,9);
printf('登录号书名作者名图书类别出版单位出版时间价格数量');
toxy(20,10);
printf('-');
而(p!=空)
{
如果(p!=NULL(strcmp(p-name,information)==0 | | strcmp(p-author,information)==0 | | strcmp(p-number,information)==0 | | strcmp(p-publish,information)==0)
{
toxy(20,I);
printf('%ssss s s %.2fd\n',p-number,p-name,p-author,p-type,p-publish,p-time,p-price,p-num);
我;
}
p=p-next;
}
toxy(45,I);
printf('按任意键返回!');
getch();
find _ book();
}
void save_book(book p) //将p中内容写入文件
{
FILE * fp//文件指针
fp=fopen('mybook ',' ab ');//以追加的方式打开名字为我的书的二进制文件
if(fp==NULL)
{
printf('无法打开文件');
}
if(fwrite(p,N,1,fp)!=1) //将p所指向的一段大小为普通的内容存入复调钢琴所指向的文件中
{
printf("写入错误");
}
fclose(FP);//关闭文件
}
void over() //退出软件
{
char t;
toxy(48,11);
printf('-');
toxy(48,12);
printf('|您确定要退出吗?|');
toxy(48,14);
printf('| 1 .确定2.取消|');
toxy(48,15);
printf('-');
while(1)
{
t=getch();//输入t
开关(吨)
{
案例"1":
系统(“cls”);
颜色(6);
toxy(48,10);
printf('正在安全退出.');
睡眠(1000);//暂停一秒
系统(“cls”);
颜色(8);
toxy(48,10);
printf('已安全退出软件');
toxy(48,12);
printf('谢谢使用!');
toxy(48,14);
printf('by-by^_^');
退出(0);打破;//终止程序
案例"2":
menu();打破;//调用函数,进入菜单
默认:断开
}
}
}
main() //简洁明了的主函数
{
menu();//菜单
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。