图书管理系统(大一C语言大作业 包含主要结构体,文件操作, 如数据的修改 查询 删除等)
Posted 归止于飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图书管理系统(大一C语言大作业 包含主要结构体,文件操作, 如数据的修改 查询 删除等)相关的知识,希望对你有一定的参考价值。
图书管理系统
1.前言
在大一下,我们的C语言课程布置了一次大作业,要求做出一个管理系统,整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。各种信息管理系统本质上是没有太大区别的,对于数据的操作都是差不多的。
2.功能及其相关函数
2.1 菜单界面的构建
建立两个界面函数,用来搭建主页,这里用到两个头文件
#include<conio.h>
定义了通过控制台的数据输入与输出函数
#include<windows.h>
用来调整方框大小与背景颜色
#include<conio.h>
#include<windows.h>
void Menu1()
{
system("mode con cols=54 lines=30");
system("color F2");
printf("**********欢迎使用****大学图书管理系统***********\\n");
}//标题函数1
void Menu2()
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("\\t\\t1.录入图书\\t\\t\\n");
printf("\\t\\t2.显示图书\\t\\t\\n");
printf("\\t\\t3.查询图书\\t\\t\\n");
printf("\\t\\t4.修改图书\\t\\t\\n");
printf("\\t\\t5.删除图书\\t\\t\\n");
printf("\\t\\t0.退出\\t\\t\\n");
printf("\\t\\t输入你的操作:");
}//标题函数2
2.2 功能一 录入图书
设置一个WriteToFile()函数,利用scanf函数将数据输入给结构体,利用fwrite函数将结构体数据写入"book1.dat"这个二进制文件中。利用while函数可以进行反复录入。
2.3 功能二 显示图书
利用fread()函数将数据读出二进制文件
while (!feof(fp))
{
if (fread(&stu, LEN, 1, fp))
{
printf("%10s\\t%8s\\t\\t%5s\\n", stu.id, stu.name, stu.author);
}
}
此时利用if语句可以有效避免结构体数据被重复读出。
2.4 功能三 查询图书
此时利用strcmp函数进行图书ID的“检索”,利用fread函数读出,再利用printf函数读出来。
2.5 功能四 修改图书
此时利用strcmp函数进行图书ID的“检索”,并将其结构体内的所有数据进行重新输入,达到修改的目的。此时的fseek函数有确定文件指针的效果。
2.6 功能五 删除图书
删除图书原理:重新建立一个临时文件,将除了需要旧文件删除的内容全部复制到临时文件中,再利用remove函数删除掉旧文件,使用rename函数将临时文件改名为旧文件名字。达到删除的目的
3.注意事项
(1):可以利用链表简化程序
(2):应该要尽可能
扩充管理系统的功能
(3):本人使用VS2017编写程序,不同的版本可能不兼容
(4):main()中利用到do-while和switch函数实现主页菜单的效果
4.源程序
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define LEN sizeof(book)
typedef struct book //确认结构体
{
char id[8];
char name[31];
char author[27];
char publish[31];
double price;
}book;
void Menu1();//标题函数
void Menu2();//菜单函数
void WriteToFile();//书籍信息输入的函数
void ReadFromFile();//显示所有信息的函数
void QueryFile();//书籍的查询函数
void ModifyFile();//书籍的修改函数
void DeletFile();//删除数据的函数
int main()
{
int select;
do
{
Menu1();
Menu2();
scanf("%d", &select);
switch (select)
{
case 1:
WriteToFile();
break;
case 2:
ReadFromFile();
break;
case 3:
QueryFile();
break;
case 4:
ModifyFile();
break;
case 5:
DeletFile();
break;
default:
printf("退出程序!");
exit(0);
break;
}
}while ((select == 1 || select == 2)||(select == 3|| select == 4)||( select == 5));
return 0;
}//利用switch函数进行菜单的选择
void Menu1()
{
system("mode con cols=54 lines=30");
system("color F2");
printf("**********欢迎使用长沙理工大学图书管理系统***********\\n");
}//标题函数1
void Menu2()
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("\\t\\t1.录入图书\\t\\t\\n");
printf("\\t\\t2.显示图书\\t\\t\\n");
printf("\\t\\t3.查询图书\\t\\t\\n");
printf("\\t\\t4.修改图书\\t\\t\\n");
printf("\\t\\t5.删除图书\\t\\t\\n");
printf("\\t\\t0.退出\\t\\t\\n");
printf("\\t\\t输入你的操作:");
}//标题函数2
void WriteToFile()
{
FILE *fp = NULL;
book stu;
char flag = 'y';
fp = fopen("book1.dat", "ab+");//打开文件
if (fp == NULL)
{
printf("文件打开失败!\\n");
exit(1);//1表示在有错的方式退出程序
}
while ((flag == 'y' || flag == 'Y'))
{
system("cls");
Menu1();
printf("请输入图书id:");
scanf("%s", stu.id);
printf("请输入书名:");
scanf("%s", stu.name);
printf("请输入书籍作者:");
scanf("%s", &stu.author);
printf("请输入出版社:");
scanf("%s", &stu.publish);
printf("请输入价格:");
scanf("%lf", &stu.price);
fwrite(&stu, LEN, 1, fp);
fflush(stdin);
printf("继续输入吗?继续请输入y或Y:");
getchar();
scanf("%c", &flag);
}
fclose(fp);//关闭文件
return;
}//图书添加的函数
void ReadFromFile()
{
system("cls");
Menu1();
FILE *fp = NULL;
book stu;
fp = fopen("book1.dat", "rb");
if (fp == NULL)
{
printf("文件打开失败");
exit(1);
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf(" id\\t\\t书名\\t\\t作者\\n");
fseek(fp, 0, SEEK_SET);
while (!feof(fp))
{
if (fread(&stu, LEN, 1, fp))
{
printf("%10s\\t%8s\\t\\t%5s\\n", stu.id, stu.name, stu.author);
}
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
system("pause");
system("cls");
fclose(fp);
return;
}
void QueryFile()
{
system("cls");
Menu1();
book stu;
char x[8];
int flag = 0;
FILE *fp;
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("\\t\\t请输入图书id:");
scanf("%s", x);
printf(" ID 书名 作者 出版社 价格\\n");
fp = fopen("book1.dat", "rb");
if (fp == NULL)
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("错误\\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
return;
}
fseek(fp, 0, SEEK_SET);
while (fread(&stu, LEN, 1, fp))
{
if (strcmp(x, stu.id) == 0)
{
printf("%3s %5s %5s %10s %5.2lf\\n", stu.id, stu.name, stu.author, stu.publish, stu.price);
flag = 1;
}
if (flag = 0)
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("没有图书信息");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
}
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
fclose(fp);
system("pause");
system("cls");
return;
}
void ModifyFile()
{
system("cls");
Menu1();
book stu;
FILE *fp;
char x[8];
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("请输入图书id:");
scanf("%s", x);
fp = fopen("book1.dat", "rb+");
if (fp == NULL)
{
printf("文件打开失败");
exit(1);
}
fseek(fp, 0, SEEK_SET);
while (fread(&stu, LEN, 1, fp))
{
if (strcmp(x, stu.id) == 0)
{
printf("请重新输入图书id: ");
scanf("%s", stu.id);
printf("请重新输入书名: ");
scanf("%s", stu.name);
printf("请重新输入书籍作者 : ");
scanf("%s", &stu.author);
printf("请重新输入图书出版社 : ");
scanf("%s", &stu.publish);
printf("请重新输入图书价格 : ");
scanf("%lf", &stu.price);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
fflush(stdin);
fseek(fp, 0-LEN, SEEK_CUR);
fwrite(&stu, LEN, 1, fp);
fclose(fp);
}
if (feof(fp))
{
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
printf("没有图书信息");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n");
}
}
system("pause");
system("cls");
return;
}
void DeletFile()
{
system("cls");
Menu1();
book s;
FILE* fp;
char a[10];
fp = fopen("book1.dat", "rb+");
if (fp == NULL)
{
printf("打开文件错误!!!\\n");
exit(1);
}
printf("\\n请输入图书ID:");
scanf("%s", a);
printf("\\n\\t\\t\\t删除成功\\n");
fseek(fp, 0, SEEK_SET);
FILE* fp1;
fp1 = fopen("linshi.dat", "ab+");//读写新建一个临时文件
while (fread(&s, LEN, 1, fp))//从原文件读一个结点
{
if (strcmp(a, s.id) != 0)//不是要删除的内容
{
fwrite(&s, LEN, 1, fp1);
}
}
fclose(fp);
fclose(fp1);
remove("book1.dat");//删除原文件
rename("linshi.dat", "book1.dat");//重命名为原文件
fflush(stdin);
system("pause");
system("cls");
return;
}
以上是关于图书管理系统(大一C语言大作业 包含主要结构体,文件操作, 如数据的修改 查询 删除等)的主要内容,如果未能解决你的问题,请参考以下文章