题 目: 图书信息管理系统
图书信息管理系统
本题目设计目的是训练学生的基本编程能力,了解图书管理信息系统的开发流程,熟悉C语言的文件的基本操作。本程序中涉及结构体、文件等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用文件存储结构实现对学生成绩管理的原理,为进一步开发出高质量的图书管理系统打下坚实的基础。
1、题目要求
设计“图书信息管理系统”
要求:
图书信息包括:书号、书名、作者、价格等。使之提供以下功能:
2、分析:
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现图书信息录入,浏览,查询,修改和删除等功能的操作,在运行时达到所要目。
3、总体设计:
根据题目要求,可以将系统分为十三个模块:
4:部分程序设计:
头函数名:
#include
#include
#include
#include
#define N 80
struct book_type
{char booknum[20]; /*书号*/
char bookname[20]; /*书名*/
char authorname[20]; /*作者*/
char price[20]; //价格
}person[N]; /*存储图书信息*/
4.1:功能模块
void menu(); /*菜单函数*/
void display1(); /*执行打印的功能*/
void display2(); /*执行打印的功能*/
void reserve(); /*保存到数组*/
void read(); /*导入图书信息*/
void delay(); /*提供开关的效果*/
void choose(); /*提供选择的功能*/
void enter(); /*图书信息的输入*/
void printfinformation(); /*图书信息的打印*/
void modify(); /*图书信息的修改*/
void search(); /*图书信息的查找*/
void del(); /*图书信息的删除*/
void save(); /*图书文件信息的保存*/
void back(); /*返回主菜单*/
char ch; /*存储主菜单的调用选项信息*/
int number=0,temp1,temp2=0; /*记录每次输入的人数*/
void main()
{system("color 0e"); //选择颜色
menu(); //菜单函数
do
{scanf(" %c",&ch);
system("cls"); //清屏功能
choose();
}while(ch!='8'); //循环条件的判断
}
//提供主菜单的选择功能
void choose()
{switch(ch)
{case'1':enter();
break;
case'2':printfinformation();
back();
break;
case'3':modify();
back();
break;
case'4':search();
//back;
break;
case'5':del();
break;
case'6':save();
break;
case'7':read();
back();
case'8':printf("\n\n\t感谢您的使用!\n");
break;
default:menu();
printf("\n\n\t请重新选择:");
}
注释:图书信息以数据的形式写入文件,以文件的形式保存图书信息数据
//图书信息数据写入文件
void reserve()
{FILE *fp=NULL;
FILE *fp1=NULL;
int i;
if((fp=fopen("book.txt","w"))==NULL) //以文本只写方式打开文件
{printf("不能打开文件");
exit(0);
}
if((fp1=fopen("book1.txt","w"))==NULL) //以文本只写方式打开文件
{printf("不能打开文件");
exit(0);
}
fprintf(fp1,"%20d\n",number);
for(i=temp2;i {fprintf(fp,"%10s%15s%15s%15s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price); //写入文件 } fclose(fp1); fclose(fp); //关闭文件 } 注释:当图书信息不能打开时则关闭文件,返回菜单。 //图书信息数据文件的读取/导入 void read() {FILE *fp;//=NULL; FILE *fp1; int i=0; if((fp1=fopen("book1.txt","rb+"))==NULL) 以文本只读方式重新打开文件 {printf("不能打开文件"); exit(0); } fscanf(fp1,"%4d\n",&number); if((fp=fopen("book.txt","rb+"))==NULL) 为了读与写,打开一个二进制文件 {printf("不能打开文件"); exit(0); } for(i=0;i {fscanf(fp,"%11s%11s%11s%11s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price); //读文件 printf("%11s%11s%11s%11s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price); //输出文件数据 } reserve(); fclose(fp1); fclose(fp); menu(); back(); } //主菜单的打印 void menu() {char *s[9]={"【1】输入图书信息","【2】查看图书信息","【3】修改图书信息","【4】查找图书信息","【5】删除图书信息","【6】保存图书信息","【7】导入图书信息","【8】退出管理系统","请选择:"}; int i; printf("\n"); printf("\t\t"); display1(); printf("图书管理系统"); display1(); printf("\n\n"); printf("\t\t"); display2(); printf("\n\n"); printf("\t\t"); for(i=0;i<9;i++) {display1(); printf("%s",s[i]); display1(); printf("\n"); printf("\t\t"); } } //输出* void display1() {int i; for(i=0;i<=16;i++) {printf("*"); delay(); } } //输出~ void display2() {int i; for(i=0;i<=24;i++) {printf("~"); delay(); } } //提供开关的效果 void delay() {long i,n=4000000; for(i=0;i {if(ch!='\0') i=n; //运行过后可消除开关的延迟效果 } } //图书信息的输入 void enter() {int i; printf("请输入图书的册数:"); scanf("%d",&temp1); number+=temp1; for(i=temp2;i {printf("请输入%d本图书的信息:",i+1); printf("\t书号:"); scanf("%s",person[i].booknum); printf("\t书名:"); scanf("%s",person[i].bookname); printf("\t作者:"); scanf("%s",person[i].authorname); printf("\t价格:"); scanf("%s",person[i].price); } reserve(); temp2+=temp1; back(); //返回主菜单 } //图书信息的打印 void printfinformation() {int i; if(number==0) {printf("\t没有图书信息"); } else {printf("\n\t\t~~~~~~~~~~~~图书信息~~~~~~~~~~~~~~~\n"); printf("--------------------------------------------------\n"); printf(" 书号 书名 作者 价格\n"); printf("--------------------------------------------------\n"); for(i=0;i {printf("%10s%11s%11s%11s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price); printf("--------------------------------------------------\n"); } } }//图书信息的修改 //图书信息的查找 void search() {int i,k,flag; char temp[20],temp1; if(number==0) {printf("\t没有图书信息"); } else {do {printf("请输入你要查找的图书是书号或书名:"); scanf("%s",temp); for(i=0;i {if(strcmp(temp,person[i].booknum)==0||strcmp(temp,person[i].bookname)==0) {k=i; flag=1; break; } if(i==(number-1)&&(strcmp(temp,person[i].booknum)!=0)&&(strcmp(temp,person[i].bookname)!=0)) {printf("不存在该图书\n"); flag=0; } } if(flag==1) {printf("该图书的信息:\n"); printf("--------------------------------------------------\n"); printf("\3 书号 书名 作者 价格\n"); printf("--------------------------------------------------\n"); printf("%5s%7s%9s%9s\n",person[k].booknum,person[k].bookname,person[k].authorname,person[k].price); printf("--------------------------------------------------\n"); } printf("\n是否继续查找?Y/N:"); scanf("%c",&temp1); }while(temp1=='y'||temp1=='Y'); } back(); } void del() {int i,k,flag; char temp[20],temp1; if(number==0) {printf("\t没有图书信息"); } else {printfinformation(); do {printf("请输入要删除的图书信息的书号或书名:"); scanf("%s",temp); for(i=0;i {if(strcmp(temp,person[i].booknum)==0||strcmp(temp,person[i].bookname)==0) {k=i; flag=1; break; } if(i==(number-1)&&(strcmp(temp,person[i].booknum)!=0)&&(strcmp(temp,person[i].bookname)!=0)) {printf("不存在该图书\n"); flag=0; } } if((flag==1)&&(number==1)) {number--; temp2--; printf("该图书信息已经成功删除\n\n"); } if((flag==1)&&(number<=0)) {printf("已经没有图书信息,请重新输入!\n\n"); } if((flag==1)&&(number>1)) {for(i=k;i<(number-1);i++) {strcpy(person[i].booknum,person[i+1].booknum); strcpy(person[i].bookname,person[i+1].booknum); strcpy(person[i].authorname,person[i+1].authorname); strcpy(person[i].price,person[i+1].price); } number--; temp2--; printf("该图书信息已经成功删除\n\n"); } printf("是否继续删除?Y/N"); scanf("%c",&temp1); }while(temp1=='Y'||temp1=='y'); printf("是否显示删除操作后全部图书信息?Y/N:"); scanf("%c",&temp1); if(temp1=='y'||temp1=='Y') {printfinformation(); } reserve(); } back(); } 注释:当输入数据时选择1则返回上次的记录,2则保存记录。会输出相应的数据。 //保存记录 void save() {char temp; printf("1、读取上次的记录:\n2、保存现在的记录:\n请选择:"); scanf("%c",&temp); if(temp=='1') {printf("\n\t\t/~~~~~~~~~~~~~图书信息~~~~~~~~~~~~~~~\n"); printf("--------------------------------------------------\n"); printf(" 书号 书名 作者 价格\n"); read(); back(); } else {printf("\t程序已经保存\n"); back(); } } //返回主菜单 void back() {printf("\n\t\t输入任意键返回主菜单:"); getch(); //提供任意键返回效果 system("cls"); //清屏功能 menu(); //打印主菜单 } 5运行与测试报告: 功能选择键。 输入图书信息。 查看图书信息。 修改图书信息。 查找图信息。 删除图书信息。 保存图书信息。 图书信息的导入。 退出图书管理系统。 需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。 纷传 点击用微信打开即可,过程有点繁琐请见谅。
需要全部资料可以在我的资源里下载,资料包括程序文档、源程序。