C语言课程设计 图书管理系统
提示:下方有设计要求及源代码。
一、课程设计要求
设计要求:
- 引言
图书管理系统是智能办公系统的重要组成部分。图书管理系统将传统的图书管理方式彻底的解脱出来,提高管理效率,减轻管理人员的工作量,减少出错概率。使人们来获取信息、掌握信息。系统实现了借还书的方便性、高效性、有效性和及时性。 - 需求分析
2.1 需求概述
本次设计的职工信息管理系统,应该等提供以下功能:
(1)录入图书信息
(2)图书信息的浏览
(3)图书查询
(4)图书排序
(5)图书信息的删除
(6)图书信息的修改
(7)退出系统
会员管理
(1) 会员注册
(2) 会员登陆
(3) 会员注销
(4) 会员还书
2.11需求说明
(1)录入图书信息,录入图书编号时会判断此编号是否存在,若存在不能成功录入。
(2)图书浏览可以浏览全部图书!
(3)图书查询可按图书编号模糊查询。
(4)排序可以按年份和价格排序。
(5)删除和修改通过图书编号进行删除。
在图书管理系统中,管理员为每个读者建立一个账户,账户内储存者个人的详细信息,读者可以凭借借书卡在图书馆进行图书的借、还,不同类别的读者在借书借阅图书时,由管理员录入借书卡号,系统首先验证该卡号的有效性,若无效,则提示无效的原因;若有效,则显示卡号、姓名、借书限额、已借数量、在借阅信息中添加相应的记录,归还图书时,由管理员录入借书卡号和带归还的图书编号,显示借书卡号、读者姓名,读者姓名。
3总体设计
3.1功能模块图
4详细设计
4.1功能模块处理逻辑
该系统主要有以下功能:浏览功能、查询功能、添加功能、修改功能、删除功能
(1) 信息输入模块
打开图书信息文件
while(继续输入)
{
读入图书信息;
将读入信息添加到职工信息文件中;
提示是否继续输入;
}
关闭职工信息文件;
(2)信息浏览模块
打开图书信息文件;
while(不到文件结束)
{
从文件中顺序读出一个图书的信息;
按指定格式输出该图书的信息;
}
关闭职工信息文件;
(3)信息查询模块
while(仍继续查询)
{
if(按年份查询)
{
读入查询的职工工资条件;
打开职工信息文件;
}
while(不到文件结束)
{
顺序读出一个图书的信息;
if(该职工信息的工资符合条件)输出该图书的信息;
}
关闭图书信息文件;
提示共有几条符合条件的记录;
}
else if(按年份查询)
{
读入查询的职工工资条件;
打开职工信息文件;
while(不到文件结束)
{
顺序读出一个图书的信息;
if(该职工信息的工资符合条件)输出该图书的信息;
}
关闭图书信息文件;
提示共有几条符合条件的记录;
}
else 提示输入不合适;
提示是否继续查询;
}
(4)信息修改模块:
while(继续修改)
{
从给出信息文件中所有的记录情况;
提示并读入待修改的记录的图书编号;
打开图书信息文件;
查找图书的编号;
进行修改;
修改完毕重新写回到原职工信息文件中;
关闭职工信息文件;
}
(5)信息删除模块;
while(继续删除)
{
从给出信息文件中所有的记录情况;
提示并读入待删除的记录的图书编号;
打开图书信息文件;
查找图书的编号;
询问是否要删除;
删除完毕;
关闭职工信息文件;
}
(6)菜单选择模块:
给出信息提示;
清屏;
绘制菜单(包含输入、显示、查询、修改、删除、返回上一级菜单、退出)
提示菜单选择并读入到变量;
根据读入变量的值调用不同的模块函数;
4.2 数据结构
本系统用到的数据结构具体如下:
struct tushu
{
char bno[20]; //书号
char bname[20];//书名
char name[20];//作者
char cbs[20];//出版社
char lb; //类别
long int cbsj;//出版时间
float jg; //价格
};
struct hyzc
{
char xh[20];
char pwd[7];
};
struct hyname //
{
char xh[20];
char name[20];
char bno[20];
};
struct hyhs
{
char xh[20];
char bno[20];
};
6.总结
通过本人努力和老师的关心指导,和同学们团结协作,一起完成了该课题。通过这次课程设计我系统地掌握了文件的应用,并锻炼饿了自己的团队合作精神。最后感谢任石老师的帮助。
二、运行结果如下
三、源代码如下
代码如下:
#include <stdio.h>
#include <stdlib.h>//其中包含system函数
#include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
#include <string.h>//定义字符数组
#include <math.h>
#define LEN sizeof(struct book)//有关图书信息的结构体
#define LEN1 sizeof(struct reader)//有关读者信息的结构体
#define LEN2 sizeof(struct land)//有关登录系统的结构体
struct book//图书信息
{
char num[20],nam[20],aut[20],pub[20],cat[20];
int many;
float price;
struct book*next;
};
struct reader//读者借阅信息
{
int jnum;
char jnam[20],time[20],tsnam[20];
struct reader *next;
};
struct land//登录信息
{
int zhanghao;
char password[20];
struct land*next;
};
int tjzs();//统计library文本个数函数
void xg(int,char[] );
void mainmenu();//显示主菜单
void tsmenu();//显示图书信息菜单
void jmenu();//显示借阅信息菜单
void lmenu();//显示登录菜单
void main1();// 主菜单功能
void tsmain();//图书菜单功能
void cxts();//查询图书
void zjts();//增加图书
void scts();//删除图书
void llts();//浏览图书
void jmain();//读者借阅信息
void js();//借书
void hs();//还书
void cxjs();//查询借书
void lljs();// 浏览借书情况
void land();//登录功能系统
void hyzx();
int xinjian(int,char[] );//创建账号密码
void xgmm();//修改密码
void lmain();//登录界面函数
int tjzs()//统计图书文本个数
{
FILE *fp;
int txcl=0,n;
float tprice=0;
char tname[20]={
'\0'},tauthor[20]={
'\0'},tchuban[20]={
'\0'},tkind[20]={
'\0'},tshuhao[20]={
'\0'};
fp=fopen("library.txt","r");//打开文件
for (n=0;!feof(fp);n++)//逐个读文件
fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
n--;
fclose(fp);//关闭文件
return (n);//返回个数
}
int tjdzzs()//统计文读者本个数函数
{
FILE *fp;
int zhenghao=0,n;
char mingzi[20]={
'\0'},riqi[20]={
'\0'},zname[20]={
'\0'};
fp=fopen("reader.txt","r");//打开文件
for (n=0;!feof(fp);n++)//逐个读文件
fscanf(fp,"%d%s%s%s ",&zhenghao,&mingzi,&riqi,&zname);
n--;
fclose(fp);//关闭文件
return (n);//返回个数
}
int tjzs3()//统计账号密码文本个数
{
FILE *fp;
int zhao=0,n;
char mm[20]={
'\0'};
fp=fopen("land.txt","r");//打开文件
for (n=0;!feof(fp);n++)//逐个读文件
fscanf(fp,"%d %s",&zhao,mm);
n--;
fclose(fp);//关闭文件
return (n);//返回个数
}
void mainmenu()//主菜单
{
system ("cls");
printf("--------------------------------------------------");
printf("\n\n 1.图书系统\n\n");
printf("\n\n 2.会员借阅系统\n\n");
printf("\n\n 3.退出系统\n\n");
printf("\n\n 请按键选择,回车确定\n");
printf("--------------------------------------------------\n");
return ;
}
void tsmenu() //图书馆信息菜单
{
system ("cls");
printf("----------------------------------------------------");
printf("\n 1.录入图书信息\n\n");
printf("\n 2.图书信息的删除\n\n");
printf("\n 3.图书查询\n\n");
printf("\n 4.图书信息的浏览\n\n");
printf("\n 5.图书信息的修改\n\n");
printf("\n 6.图书排序\n\n");
printf("\n 7.返回上一级\n\n");
printf("\n 请按键选择,回车确定\n");
printf("---------------------------------------------------\n");
return ;
}
void main1()
{
void tsmian();
void jmain();
char choose;
mainmenu();
scanf(" %c",&choose);
switch(choose)//功能函数
{
case'1':
tsmain();
break;
case'2':
jmain();
break;
case'3':
system("cls");
getch();
exit(0);
system ("cls");
break;
}
}
void tsmain()
{
void zjts();
void scts();
void ctts();
void llts();
char choose;
tsmenu();
scanf(" %c",&choose);
for(;;)
{
switch(choose)
{
case'1':
zjts();
break;
case'2':
scts();
break;
case'3':
cxts();
break;
case'4':
llts();
break;
case'7':
main1();
break;
}
}
}
void zjts()//增加图书
{
FILE*fp;
char i;
int many=0;
float price=0;
char nam[20]={
'\0'},aut[20]={
'\0'},cat[20]={
'\0'},pub[20]={
'\0'},num[20]={
'\0'};
system ("cls");
//if ((fp=fopen("library.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
// {
// fp=fopen("library.txt","a");
// fclose(fp);
//}
fp=fopen("library.txt","a");
printf("\n请按以下格式输入图书信息:\n书号 书名 作者 出版社 类别 进库量 单价");
for(;i!=27;)//为了实现输入一次后按esc退出
{
printf("请输入:\n");
scanf("%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
printf("继续输入请按回车,结束输入请按Esc\n");
i=getch();//暂停程序当i接收后继续下一条指令
for (;i!=