前几天跟着网上的教程做了一个图书管理体系(c++),但是我增加了收集的元素后发现输出始终为0.0
下列为源码
/*
* @Author: your name
* @Date: 2021-09-18 22:23:13
* @LastEditTime: 2021-09-19 17:23:46
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \FILE\FILE\C++\book\5.cpp
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct bookInfo //图书信息
{
int num; //编号
char name[100]; //书名
char zuozhe[100]; //作者
char chubanshe[100]; //出版社
char riqi[100]; //出版日期
float price; //价格
};
struct tushuguan //存放书籍信息
{
struct bookInfo data;
struct tushuguan* next;
};
struct tushuguan* list=NULL;
struct tushuguan* createHead() //创建表头
{
//动态内存申请
struct tushuguan*headtushuguan=(struct tushuguan*)malloc(sizeof(struct tushuguan));
headtushuguan->next = NULL;
return headtushuguan;
};
// 创建节点
// 把用户的数据变为结构体变量
struct tushuguan* creatatushuguan(struct bookInfo data)
{
struct tushuguan*newtushuguan=(struct tushuguan*)malloc(sizeof(struct tushuguan));
newtushuguan->data = data;
newtushuguan->next = NULL;
return newtushuguan;
};
// 表头插入
void inserttushuguan(struct tushuguan* headtushugaun,struct bookInfo data)
{
struct tushuguan* newtushuguan = creatatushuguan(data);
newtushuguan->next = headtushugaun->next;
headtushugaun->next = newtushuguan;
}
// 表尾插入
// void inserttushuguanByTali(struct tushugaun* headtushugaun, int data)
// {
// struct tushuguan* pMove = headtushugaun;
// while (pMove->next != NULL)
// {
// pMove = pMove->next;
// }
// struct tushuguan* newtushuguan = creatatushuguan(data);
// pMove->next = newtushuguan;
// }
//指定删除
//poseLeft->next=postushuguan->next;
//free(postushuguan);
void deletetushuguanByName(struct tushuguan* headtushuguan,char *bookName)
{
struct tushuguan* posLefttushuguan = headtushuguan;
struct tushuguan* postushuguan = headtushuguan->next;
while (postushuguan != NULL && strcmp(postushuguan->data.name,bookName))
{
posLefttushuguan = postushuguan;
postushuguan = posLefttushuguan->next;
}
//讨论查找结果
if(postushuguan == NULL)
{
return;
}
else
{
printf("删除成功\n");
posLefttushuguan->next=postushuguan->next;
free(postushuguan);
posLefttushuguan =NULL;
}
}
struct tushuguan* searchByName(struct tushuguan* headtushuguan,char* bookName)
{
struct tushuguan* postushuguan = headtushuguan->next;
while (postushuguan !=NULL && strcmp(postushuguan->data.name,bookName))
{
postushuguan = postushuguan->next;
}
return postushuguan;
};
void printList(struct tushuguan* headtushuguan) //演示部分
{
struct tushuguan* pMove = headtushuguan->next;
printf("编号\t书名\t作者\t出版社\t出版日期\t价格\n");
while(pMove!=NULL)
{
printf("%d\t%s\t%s\t%s\t%s\t%.1f\n",pMove->data.num,pMove->data.name,pMove->data.zuozhe,pMove->data.chubanshe,pMove->data.riqi,pMove->data.price);
pMove = pMove->next;
}
}
void makeMenu()//主界面菜单
{
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t*********************************************\n");
printf("\t\t\t1 ------------------图书信息录入\n");
printf("\t\t\t2 ------------------图书信息浏览\n");
printf("\t\t\t3 ------------------图书信息查询\n");
printf("\t\t\t4 ------------------图书信息删除\n");
printf("\t\t\t5 ------------------图书信息修改\n");
printf("\t\t\t0 -----------------退出图书管理系统\n");
printf("\t\t*********************************************\n");
printf("\t\t请选择:");
}
//文件操作
//存入文件
void saveInfoToFile(const char* fileName,struct tushuguan* headtushuguan)
{
FILE* fp= fopen(fileName,"w");
struct tushuguan*pMove = headtushuguan->next;
while (pMove != NULL)
{
fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%.1f\n",pMove->data.num,pMove->data.name,pMove->data.zuozhe,pMove->data.chubanshe,pMove->data.riqi,pMove->data.price);
pMove = pMove->next;
}
fclose(fp);
}
//读取文件
void readInfoFromFile(const char* fileName,struct tushuguan* headtushuguan)
{
FILE*fp = fopen(fileName,"r"); //第一次打开程序没有文件
if(fp == NULL)
{
//没有文件就新建一个
fp = fopen(fileName,"w+");
}
struct bookInfo tempData;
while (fscanf(fp, "%d\t%s\t%s\t%s\t%s\t%.1f\n",&tempData.num,tempData.name,tempData.zuozhe,tempData.chubanshe,tempData.riqi,&tempData.price) !=EOF)
//while (fscanf(fp, "%s\t%f\t%d\n",tempData.name,&tempData.price,&tempData.num) !=EOF)
{
inserttushuguan(list,tempData);
}
fclose(fp);
}
void keyDown()//交互
{
int userKey = 0;
struct bookInfo tempBook;//产生一个临时变量存放书籍信息
struct tushuguan* result = NULL;
scanf("%d",&userKey);
switch (userKey)
{
case 0:
printf("[退出]\n");
printf("退出成功");
system("pause");
exit(0); //关闭程序
break;
case 1:
printf("[录入]]\n");
printf("请输入录入的图书信息(编号,书名,作者,出版社,出版日期,价格):");
scanf("%d%s%s%s%s%.1f",&tempBook.num,tempBook.name,tempBook.zuozhe,tempBook.chubanshe,tempBook.riqi,&tempBook.price);
inserttushuguan(list,tempBook);
saveInfoToFile("E:\\FILE\\FILE\\C++\\book\\bookinfo.txt",list);
break;
case 2:
printf("[浏览]\n");
printList(list);
break;
case 3:
printf("[查询]\n");
printf("请输入需要查询的书籍名称:");
scanf("%s",tempBook.name);
result = searchByName(list,tempBook.name);
if(result ==NULL)
{
printf("未找到相关信息\n");
}
else
{
printf("编号\t书名\t作者\t出版社\t出版日期\t价格\n");
printf("%d\t%s\t%s\t%s\t%s\t%0.1f\n",result->data.num,result->data.name,result->data.zuozhe,result->data.chubanshe,result->data.riqi,result->data.price);
}
break;
case 4:
printf("[删除]\n");
printf("请输入需要删除的书籍名称:");
scanf("%s",tempBook.name);
deletetushuguanByName(list,tempBook.name);
saveInfoToFile("E:\\FILE\\FILE\\C++\\book\\bookinfo.txt",list);
break;
case 5:
printf("[修改]\n");
printf("请输入需要修改的书籍名称:");
scanf("%s",tempBook.name);
deletetushuguanByName(list,tempBook.name);
saveInfoToFile("E:\\FILE\\FILE\\C++\\book\\bookinfo.txt",list);
printf("请输入修改后的图书信息(编号,书名,作者,出版社,出版日期,价格):");
scanf("%d%s%s%s%s%.1f",&tempBook.num,tempBook.name,tempBook.zuozhe,tempBook.chubanshe,tempBook.riqi,&tempBook.price);
inserttushuguan(list,tempBook);
saveInfoToFile("E:\\FILE\\FILE\\C++\\book\\bookinfo.txt",list);
break;
default:
printf("[输入错误]\n");
break;
}
///自己封装一个edit
}
int main()
{
// 表头输出
// 输出210
// struct tushuguan* list = createHead();
// for(int i = 0; i < 3; i++)
// {
// inserttushuguan(list, i);
// }
// printList(list);
// 表尾输入
// struct tushugaun* list = createtushuguan();
// inserttushuguanByTali(list,1);
// inserttushuguanByTali(list,2);
// printList(list);
list= createHead();
readInfoFromFile("E:\\FILE\\FILE\\C++\\book\\bookinfo.txt",list);
while(1)
{
makeMenu();
keyDown();
system("pause");
system("cls");
}
makeMenu();
system("pause");
}
下面是出错截图
我输入的是648