#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include <conio.h>
#define N 1000//定义结构体最大长度
struct book{
char name[60];//书名
char num[20];//图书编号
double price;//书籍价格
char Head[100];
}bk[150];
int n=0;//全局变量 ,记录图书数量
void write();
void write1();
//读出文件内容
void read()
{
FILE*fp;
if ((fp=fopen("book.txt","r"))==NULL)
{
printf("file open error!\n");
exit(0);
}
else
{
fscanf(fp,"%s",&bk[1].Head);
fscanf(fp,"%s %s %s",&bk[2].Head,&bk[3].Head,&bk[4].Head);
while(!feof(fp))
{
fscanf(fp,"%s %s %lf",bk[n].num,bk[n].name,&bk[n].price);
n++;
}
}
fclose(fp);
printf("读取成功!");
}
void Show()//显示文件内容
{
int i=0;
if(n==0)
{
printf("无记录\n");
}
else
{
printf("%s\n%s\t\t\t%s\t\t\t%s\n",bk[1].Head,bk[2].Head,bk[3].Head,bk[4].Head);
for(i=0;i<n;i++)
{
printf("%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
}
}
}
void Del()//删除图书
{
FILE *fp;
int f;//删除图书的位置
printf("请输入删除图书的位置:");
scanf("%d",&f);
for(int i=f-1;i<n-1;i++){
bk[i]=bk[i+1];
}
if((fp=fopen("book.txt","w"))==NULL){
printf("cannot open this file\n");
exit(0);
}
for(int i=0;i<n-1;i++){
fprintf(fp,"%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
}
fclose(fp);
for(int i=0;i<n;i++)
printf("%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
printf("删除成功!");
}
void Search_By_Name()//根据书名查找图书
{
int i;
int flag=0;
char temp[20];
printf("\t\t\t请输入要查询的图书书名:");
scanf("%s",&temp);
for(i=0;i<n;i++)//遍历结构体数组
{
if (strcmp(temp,bk[i].name)==0)
{
flag=1;//说明已经找到
printf("%d",flag);
printf("ISBN\t");
printf("%s\t",bk[i].num);
printf("书名\t");
printf("%s\t",bk[i].name);
printf("价格\t");
printf("%.2f\n",bk[i].price);
}
}
if (flag==0)//还是等于0说明没找到
{
printf("\t\t\t无该书名!\n");
}
}
void Search_By_Location()//根据位置查找图书
{
int id;
system("cls");
printf("\t\t\t请输入图书位置:");
scanf("%d",&id);
if(id<0||id>n)
{
printf("\t\t\t无书\n");
}
else
{
printf("ISBN\t");
printf("%s\t",bk[id].num);
printf("书名\t");
printf("%s\t",bk[id].name);
printf("价格\t");
printf("%.2f\n",bk[id].price);
printf("\t\t\t");
}
system("pause");
}
void Insert()//插入新的图书
{
FILE *fp;
int f;//插入图书的位置
struct book bk1;//插入的图书信息
printf("请输入插入图书的位置:");
scanf("%d",&f);
printf("请输入要插入的信息:");
scanf("%s %s %lf",bk1.num,bk1.name,&bk1.price);
for(int i=n-1;i>=f-1;i--)
{
bk[i+1]=bk[i];
}
bk[f-1]=bk1;
if((fp=fopen("book.txt","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
for(int i=0;i<n+1;i++){
fprintf(fp,"%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
}
fclose(fp);
Show();
printf("插入成功!\n");
}
void Change()//修改图书价格
{
int i=0;
system("cls");
double t=25.00;
for(i=0;i<n;i++)
{
if(fabs(bk[i].price-t)<1e-15)
bk[i].price=bk[i].price*(1.2);
else
bk[i].price=bk[i].price*(1.1);
}
write();
for(i=0;i<n;i++)
printf("%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
printf("修改成功!");
}
void write()//新的价格表内容
{
int i=0;
FILE *fp;
fp=fopen("book_newprice.txt","w");
if(fp==NULL)
{
printf("打开失败");
return;
}
while(i<n)
{
fprintf(fp,"%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
i++;
}
fclose(fp);
}
void Sort()//按照价格由低到高进行排序
{
system("cls");
int i,j,k;
//int flag=1;//flag=1表示交换顺序失败,flag=0表示交换顺序成功
struct book temp;
for(i=0;i<n;i++)
{
//flag=0;//每次递归后清零
for(j=0;j<n-1-i;j++)
{
if(bk[j].price>bk[j+1].price)
{
temp=bk[j];
bk[j]=bk[j+1];
bk[j+1]=temp;
}
// flag=1;
}
}
write1();
printf("排序后的结果是:\n");
for(j=0;j<n;j++)
printf("%s\t%s\t%.2f\n",bk[j].num,bk[j].name,bk[j].price);
}
void write1()//按照价格进行排序的文件
{
int i=0;
FILE *fp;
fp=fopen("book_newsort.txt","w+");
if(fp==NULL)
{
printf("打开失败");
return;
}
while(i<n)
{
fprintf(fp,"%s\t%s\t%.2f\n",bk[i].num,bk[i].name,bk[i].price);
i++;
}
fclose(fp);
}
int main()
{
int Chioce;
int flag = 1;
while (1)
{
printf ("***************************************Welcome to the Books Management System (BMS)*************************************\n");
printf( "1.读取所有图书信息\n2.输出所有图书信息\n3.插入图书\n4.根据位置删除图书信息\n5.根据书名查找图书\n6.根据位置查找图书\n7.修改价格信息并将生成的信息导入新文件\n8.排序并将排序后的信息导入新的文件\n9.退出\n");
printf("请选择...");
scanf("%d",&Chioce);
switch (Chioce) {
case 1:read(); break;//读取文件数据
case 2:Show(); break;//输出所有图书信息
case 3:Insert(); break;//插入图书信息
case 4:Del(); break;//删除图书信息
case 5:Search_By_Name(); break;//根据书名查找图书
case 6:Search_By_Location(); break;//根据位置查找图书
case 7:Change(); break;//修改图书价格
case 8:Sort(); break;//冒泡排序
case 9:printf("\t成功退出,谢谢使用!\n"); exit(0);
default:
printf("输错啦! 请输入1 ~ 9之间的整数\n");
break;
}
}
}
C 语言实现图书管理系统
最新推荐文章于 2024-03-19 10:37:53 发布