program:D:\Debug\bookmanager.exe
File: fopen.c
Line:54
expression: *file != _T('\0')
For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
这是为什么?望高手指点!
以下是源程序:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void creat();
void read();
void save();
void insert();
void deleter();
void change();
void sort();
#define FORMAT "%"
int n=0;
FILE *fp;
struct book{
int id;
char name[20];
char author[20];
char press[20];
float price;
int count;
}bk[100];
struct book *p;
void creat()
{
char filename[20];
printf("请输入filename:");
gets(filename);
fp=fopen(filename,"wb+");
printf("已成功建立数据库文件。\n\n");
fclose(fp);
}
void read()
{
char filename[20];
printf("\n请输入filename:");
gets(filename);
if((fp=fopen(filename,"rb"))==NULL){
printf("输入有误,不存在该文件!!\n\n");
return;
}
do{
if(fread(&bk[n],sizeof(struct book),1,fp)!=1){
if(feof(fp))
printf("文件读取成功!");
else printf("文件读取失败!");
}
}while(1);
//fclose(fp);
}
void save()
{
int i;
char filename[20];
printf("请输入要保存的文件名。");
gets(filename);
if((fp=fopen(filename,"wb"))==NULL){
printf("不能保存文件!");
return;
}
else{
for(i=0;i<n;i++)
if(fwrite(&bk[i],sizeof(struct book),1,fp)!=1)
printf("文件保存错误!");
fclose(fp);
}
}
void insert()
{
char c;
do{
printf("\n请输入图书的书号:");
scanf("%d",&bk[n].id);
printf("请输入书名:");
scanf("%s",bk[n].name);
printf("请输入作者:");
scanf("%s",bk[n].author);
printf("请输入出版社:");
scanf("%s",bk[n].press);
printf("请输入价格:");
scanf("%f",&bk[n].price);
printf("请输入书的数目");
scanf("%d",&bk[n].count);
getchar();
n++;
printf("继续录入?(按y继续,其他退出)");
c=getchar();
printf("\n");
}while(c=='y'||c=='Y');
printf("数据已成功输入!\n");
}
void deleter()
{
int id,i,flag=1;
printf("请输入图书号:");
scanf("%d",&id);
for(i=0;i<n;i++)
if(bk[i].id==id)
bk[i]=bk[n-1],n--,flag=0;
if(flag)
printf("输入有误,不存在该书的数据!!\n");
printf("\t已成功删除该书的数据!");
}
void change()
{
int i,id;
char c;
printf("请输入要更改的图书的书号:");
scanf("%d",&id);
do{
for(i=0;i<n;i++)
if(bk[i].id==id){
printf("\n请输入图书的书号:");
scanf("%d",&bk[n].id);
printf("请输入书名:");
scanf("%s",bk[n].name);
printf("请输入作者:");
scanf("%s",bk[n].author);
printf("请输入出版社:");
scanf("%s",bk[n].press);
printf("请输入价格:");
scanf("%f",&bk[n].price);
printf("请输入书的数目");
scanf("%d",&bk[n].count);
}
getchar();
printf("继续更改吗?");
c=getchar();
}while(c=='y'||c=='Y');
printf("数据已成功更改!\n");
}
void sort()
{
int i,j;
struct book temp;
for(i=0;i<n-2;i++)
for(j=0;j<=n-2-i;j++)
if(bk[j].id<bk[j+1].id){
temp=bk[j];
bk[j]=bk[j+1];
bk[j+1]=temp;
}
}
int main()
{
int s;
do{
system("cls");
printf("***************************************************\n");
printf("*** 欢迎使用图书管理系统 ***\n");
printf("*** 1.创建新的数据文件 ***\n");
printf("*** 2.读入数据 ***\n");
printf("*** 3.保存数据 ***\n");
printf("*** 4.插入数据 ***\n");
printf("*** 5.删除数据 ***\n");
printf("*** 6.更改数据 ***\n");
printf("*** 7.对数据进行排序 ***\n");
printf("*** 8.退出 ***\n");
printf("***************************************************\n");
scanf("%d",&s);
switch(s){
case 1 : creat();
case 2 : read();
case 3 : save();
case 4 : insert();
case 5 : deleter();
case 6 : change();
case 7 : sort();
//case 8 : exit(-1); break;
default : s=9;
}
}while (s==9);
return 0;
}
13 个解决方案
#1
将gets(filename)改为scanf("%s", filename)就好了.
#2
printf("请输入filename:");
fflush(stdin);
#3
为什么会出现在以上情况?
我改了,果然可以,谢谢
不过又出现另一个问题:如果我选四,当输完图书数据时会出现以下错误:
Debug Error!
Program: D:\Debug\bookmanager.exe
runtime error
(Press Retry to debug the application)
我改了,果然可以,谢谢
不过又出现另一个问题:如果我选四,当输完图书数据时会出现以下错误:
Debug Error!
Program: D:\Debug\bookmanager.exe
runtime error
(Press Retry to debug the application)
#4
老实说,你的程序在输入输出上的漏洞很多,不是一时可以改完的
#5
这我也知道,所以应该慢慢改,我也是刚刚开始编程的,有一点点的进步都是非常令人兴慰的!
谢谢!帮忙看看
谢谢!帮忙看看
#6
使用 scanf("%s",bk[n].name); 函数时注意不能在输入的过程中含有空格
简单的演示程序可使用gets(str)用来读取输入,该函数不支持对str的边界检查,
你可以把结构中的字符串定的长一些.
c=getchar(); 中的函数使用了行缓冲读取,不适合交互环境使用,
可以改成
c = getch();
加入include <conio.h>引用即可. 该函数不回显字符,立即返回,不需要回车.
每次调用 scanf()或gets()函数之前调用
fflush(stdin);清空控制台输入缓冲;
注意检查自己的输入是否越界...
#7
越界了!
#8
up
#9
getchar() 与 getch() 有什么区别?
谁有比较完整的源程序给小弟参考一下,谢谢!
只要达到插入,修改,删除,排序的目的。
谁有比较完整的源程序给小弟参考一下,谢谢!
只要达到插入,修改,删除,排序的目的。
#10
我把程序又改了一下,请高手帮忙看
现在遇到的一个问题是:当我运行插入函数时,当输入最后一个数据也就是书数量,就跳出错误,
要向微软发送错误信息,我晕
帮忙看看!!!小弟先谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void creat();
void read();
void save();
void insert();
void deleter();
void change();
void sort();
void print();
#define FORMAT "%"
int n=0;
FILE *fp;
struct book{
int id;
char name[20];
char author[20];
char press[20];
float price;
int count;
}bk[100];
struct book *p;
void print()
{
printf("书号 书名 作者 出版社 价格 数量\n");
for(p=bk;p<=bk+n;p++){
printf("%-8d%-8s%-8s%-10s%-8.1f%-6d\n",p->id,p->name,p->author,p->press,p->price,p->count);
}
}
void read()
{
n=0;
if((fp=fopen("bok.txt","rb"))==NULL){
printf("输入有误,不存在该文件!!\n\n");
return;
}
do{
if(fread(&bk[n],sizeof(struct book),1,fp)!=1){
if(feof(fp)){
print();
printf("文件读取成功!\n");
printf("press any key to continue!");
getch();
return;
}
else printf("文件读取失败!");
}
n++;
}while(1);
fclose(fp);
}
void save()
{
int i;
if((fp=fopen("bok.txt","wb"))==NULL){
printf("不能保存文件!");
return;
}
else{
for(i=0;i<n;i++)
if(fwrite(&bk[i],sizeof(struct book),1,fp)!=1)
printf("文件保存成功!");
fclose(fp);
}
}
void insert()
{
char c,d;
int t,a,i,j=0;
struct book temp;
read();
/*printf("Please enter the number for insert: ");
scanf("%d", &n);
for(i=0; i<m; i++)
if(n==student[i].number)
{
j=i+1;
printf("Number: %d Name: %s Sex: %s Age: %d Score: %d Address: %s \n",student[i].number, student[i].name, student[i].sex,student[i].age, student[i].score, student[i].addr);
}
if(j==0)
{
printf("No this record.");
break;
}
fflush(stdin);
printf("Insert behind number %d ?(y/n): ", n);
scanf("%c",&c);
if (c=='n' || c=='N')
continue;
temp=student[j];
printf("Number: ");
scanf("%d", &student[j].number);
printf("Name: ");
scanf("%s", student[j].name);
printf("Sex: ");
scanf("%s", student[j].sex);
printf("Age:\n");
scanf("%d", &student[j].age);
printf("Score: ");
scanf("%d", &student[j].score);
printf("Address: ");
scanf("%s", student[j].addr);
for(t=m+1; t>j; t--)
{student[t+1]=student[t];
}
student[j+1]=temp;
fflush(stdin);
printf("Do you want to insert continue?(y/n): ");
scanf("%c",&c);
}while ( c== 'y' || c== 'Y' );*/
do{
fflush(stdin);
printf("请输入要在后面插入的图书号:");
scanf("%d",&a);
for(i=0;i<n;i++)
if(bk[i].id==a)j=i+1;
if(j==0){
printf("不存在该纪录!");
getch();
break;
}
fflush(stdin);
printf("你确认要在%d后插入吗?(y/n)",a);
scanf("%c",&d);
if(d=='n'||d=='N') continue;
temp=bk[j];
printf("\n请输入图书的书号:");
scanf("%d",&bk[j].id);
printf("请输入书名:");
scanf("%s",bk[j].name);
printf("请输入作者:");
scanf("%s",bk[j].author);
printf("请输入出版社:");
scanf("%s",bk[j].press);
printf("请输入价格:");
scanf("%f",&bk[j].price);
printf("请输入书的数目");
scanf("%d",&bk[j].count);
for(i=n+1;i>j;i--)
bk[i+1]=bk[t];
bk[i+1]=temp;
n++;
printf("继续录入?(按y继续,其他退出)");
c=getchar();
printf("\n");
}while(c=='y'||c=='Y');
printf("数据已成功输入!\n");
}
void deleter()
{
int id,i,flag=1;
fflush(stdin);
printf("请输入图书号:");
scanf("%d",&id);
for(i=0;i<n;i++)
if(bk[i].id==id){
bk[i]=bk[n-1];
n--;
flag=0;
}
if(flag)
printf("输入有误,不存在该书的数据!!\n");
printf("\t已成功删除该书的数据!");
getchar();
getchar();
}
void change()
{
int i,id;
char c;
printf("请输入要更改的图书的书号:");
scanf("%d",&id);
do{
for(i=0;i<n;i++)
if(bk[i].id==id){
printf("\n请输入图书的书号:");
scanf("%d",&bk[n].id);
printf("请输入书名:");
scanf("%s",bk[n].name);
printf("请输入作者:");
scanf("%s",bk[n].author);
printf("请输入出版社:");
scanf("%s",bk[n].press);
printf("请输入价格:");
scanf("%f",&bk[n].price);
printf("请输入书的数目");
scanf("%d",&bk[n].count);
}
else {
printf("不存在的纪录!");
getchar();
break;
}
printf("继续更改吗?");
c=getchar();
}while(c=='y'||c=='Y');
printf("数据已成功更改!\n");
}
void sort()
{
int i,j;
struct book temp;
for(i=0;i<n-2;i++)
for(j=0;j<=n-2-i;j++)
if(bk[j].id<bk[j+1].id){
temp=bk[j];
bk[j]=bk[j+1];
bk[j+1]=temp;
}
}
int main()
{
int s;
do{
system("cls");
printf("***************************************************\n");
printf("*** 欢迎使用图书管理系统 ***\n");
printf("*** 2.读入数据 ***\n");
printf("*** 3.保存数据 ***\n");
printf("*** 4.插入数据 ***\n");
printf("*** 5.删除数据 ***\n");
printf("*** 6.更改数据 ***\n");
printf("*** 7.对数据进行排序 ***\n");
printf("*** 8.退出 ***\n");
printf("***************************************************\n");
printf("请输入你的选择:");
scanf("%d",&s);
switch(s){
case 2 : read(); break;
case 3 : save(); break;
case 4 : insert(); break;
case 5 : deleter(); break;
case 6 : change(); break;
case 7 : sort(); break;
}
}while (s!=8);
return 0;
}
现在遇到的一个问题是:当我运行插入函数时,当输入最后一个数据也就是书数量,就跳出错误,
要向微软发送错误信息,我晕
帮忙看看!!!小弟先谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void creat();
void read();
void save();
void insert();
void deleter();
void change();
void sort();
void print();
#define FORMAT "%"
int n=0;
FILE *fp;
struct book{
int id;
char name[20];
char author[20];
char press[20];
float price;
int count;
}bk[100];
struct book *p;
void print()
{
printf("书号 书名 作者 出版社 价格 数量\n");
for(p=bk;p<=bk+n;p++){
printf("%-8d%-8s%-8s%-10s%-8.1f%-6d\n",p->id,p->name,p->author,p->press,p->price,p->count);
}
}
void read()
{
n=0;
if((fp=fopen("bok.txt","rb"))==NULL){
printf("输入有误,不存在该文件!!\n\n");
return;
}
do{
if(fread(&bk[n],sizeof(struct book),1,fp)!=1){
if(feof(fp)){
print();
printf("文件读取成功!\n");
printf("press any key to continue!");
getch();
return;
}
else printf("文件读取失败!");
}
n++;
}while(1);
fclose(fp);
}
void save()
{
int i;
if((fp=fopen("bok.txt","wb"))==NULL){
printf("不能保存文件!");
return;
}
else{
for(i=0;i<n;i++)
if(fwrite(&bk[i],sizeof(struct book),1,fp)!=1)
printf("文件保存成功!");
fclose(fp);
}
}
void insert()
{
char c,d;
int t,a,i,j=0;
struct book temp;
read();
/*printf("Please enter the number for insert: ");
scanf("%d", &n);
for(i=0; i<m; i++)
if(n==student[i].number)
{
j=i+1;
printf("Number: %d Name: %s Sex: %s Age: %d Score: %d Address: %s \n",student[i].number, student[i].name, student[i].sex,student[i].age, student[i].score, student[i].addr);
}
if(j==0)
{
printf("No this record.");
break;
}
fflush(stdin);
printf("Insert behind number %d ?(y/n): ", n);
scanf("%c",&c);
if (c=='n' || c=='N')
continue;
temp=student[j];
printf("Number: ");
scanf("%d", &student[j].number);
printf("Name: ");
scanf("%s", student[j].name);
printf("Sex: ");
scanf("%s", student[j].sex);
printf("Age:\n");
scanf("%d", &student[j].age);
printf("Score: ");
scanf("%d", &student[j].score);
printf("Address: ");
scanf("%s", student[j].addr);
for(t=m+1; t>j; t--)
{student[t+1]=student[t];
}
student[j+1]=temp;
fflush(stdin);
printf("Do you want to insert continue?(y/n): ");
scanf("%c",&c);
}while ( c== 'y' || c== 'Y' );*/
do{
fflush(stdin);
printf("请输入要在后面插入的图书号:");
scanf("%d",&a);
for(i=0;i<n;i++)
if(bk[i].id==a)j=i+1;
if(j==0){
printf("不存在该纪录!");
getch();
break;
}
fflush(stdin);
printf("你确认要在%d后插入吗?(y/n)",a);
scanf("%c",&d);
if(d=='n'||d=='N') continue;
temp=bk[j];
printf("\n请输入图书的书号:");
scanf("%d",&bk[j].id);
printf("请输入书名:");
scanf("%s",bk[j].name);
printf("请输入作者:");
scanf("%s",bk[j].author);
printf("请输入出版社:");
scanf("%s",bk[j].press);
printf("请输入价格:");
scanf("%f",&bk[j].price);
printf("请输入书的数目");
scanf("%d",&bk[j].count);
for(i=n+1;i>j;i--)
bk[i+1]=bk[t];
bk[i+1]=temp;
n++;
printf("继续录入?(按y继续,其他退出)");
c=getchar();
printf("\n");
}while(c=='y'||c=='Y');
printf("数据已成功输入!\n");
}
void deleter()
{
int id,i,flag=1;
fflush(stdin);
printf("请输入图书号:");
scanf("%d",&id);
for(i=0;i<n;i++)
if(bk[i].id==id){
bk[i]=bk[n-1];
n--;
flag=0;
}
if(flag)
printf("输入有误,不存在该书的数据!!\n");
printf("\t已成功删除该书的数据!");
getchar();
getchar();
}
void change()
{
int i,id;
char c;
printf("请输入要更改的图书的书号:");
scanf("%d",&id);
do{
for(i=0;i<n;i++)
if(bk[i].id==id){
printf("\n请输入图书的书号:");
scanf("%d",&bk[n].id);
printf("请输入书名:");
scanf("%s",bk[n].name);
printf("请输入作者:");
scanf("%s",bk[n].author);
printf("请输入出版社:");
scanf("%s",bk[n].press);
printf("请输入价格:");
scanf("%f",&bk[n].price);
printf("请输入书的数目");
scanf("%d",&bk[n].count);
}
else {
printf("不存在的纪录!");
getchar();
break;
}
printf("继续更改吗?");
c=getchar();
}while(c=='y'||c=='Y');
printf("数据已成功更改!\n");
}
void sort()
{
int i,j;
struct book temp;
for(i=0;i<n-2;i++)
for(j=0;j<=n-2-i;j++)
if(bk[j].id<bk[j+1].id){
temp=bk[j];
bk[j]=bk[j+1];
bk[j+1]=temp;
}
}
int main()
{
int s;
do{
system("cls");
printf("***************************************************\n");
printf("*** 欢迎使用图书管理系统 ***\n");
printf("*** 2.读入数据 ***\n");
printf("*** 3.保存数据 ***\n");
printf("*** 4.插入数据 ***\n");
printf("*** 5.删除数据 ***\n");
printf("*** 6.更改数据 ***\n");
printf("*** 7.对数据进行排序 ***\n");
printf("*** 8.退出 ***\n");
printf("***************************************************\n");
printf("请输入你的选择:");
scanf("%d",&s);
switch(s){
case 2 : read(); break;
case 3 : save(); break;
case 4 : insert(); break;
case 5 : deleter(); break;
case 6 : change(); break;
case 7 : sort(); break;
}
}while (s!=8);
return 0;
}
#11
里面有一段是没用的。
#12
UP
#13
改用C++来写^_^
#1
将gets(filename)改为scanf("%s", filename)就好了.
#2
printf("请输入filename:");
fflush(stdin);
#3
为什么会出现在以上情况?
我改了,果然可以,谢谢
不过又出现另一个问题:如果我选四,当输完图书数据时会出现以下错误:
Debug Error!
Program: D:\Debug\bookmanager.exe
runtime error
(Press Retry to debug the application)
我改了,果然可以,谢谢
不过又出现另一个问题:如果我选四,当输完图书数据时会出现以下错误:
Debug Error!
Program: D:\Debug\bookmanager.exe
runtime error
(Press Retry to debug the application)
#4
老实说,你的程序在输入输出上的漏洞很多,不是一时可以改完的
#5
这我也知道,所以应该慢慢改,我也是刚刚开始编程的,有一点点的进步都是非常令人兴慰的!
谢谢!帮忙看看
谢谢!帮忙看看
#6
使用 scanf("%s",bk[n].name); 函数时注意不能在输入的过程中含有空格
简单的演示程序可使用gets(str)用来读取输入,该函数不支持对str的边界检查,
你可以把结构中的字符串定的长一些.
c=getchar(); 中的函数使用了行缓冲读取,不适合交互环境使用,
可以改成
c = getch();
加入include <conio.h>引用即可. 该函数不回显字符,立即返回,不需要回车.
每次调用 scanf()或gets()函数之前调用
fflush(stdin);清空控制台输入缓冲;
注意检查自己的输入是否越界...
#7
越界了!
#8
up
#9
getchar() 与 getch() 有什么区别?
谁有比较完整的源程序给小弟参考一下,谢谢!
只要达到插入,修改,删除,排序的目的。
谁有比较完整的源程序给小弟参考一下,谢谢!
只要达到插入,修改,删除,排序的目的。
#10
我把程序又改了一下,请高手帮忙看
现在遇到的一个问题是:当我运行插入函数时,当输入最后一个数据也就是书数量,就跳出错误,
要向微软发送错误信息,我晕
帮忙看看!!!小弟先谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void creat();
void read();
void save();
void insert();
void deleter();
void change();
void sort();
void print();
#define FORMAT "%"
int n=0;
FILE *fp;
struct book{
int id;
char name[20];
char author[20];
char press[20];
float price;
int count;
}bk[100];
struct book *p;
void print()
{
printf("书号 书名 作者 出版社 价格 数量\n");
for(p=bk;p<=bk+n;p++){
printf("%-8d%-8s%-8s%-10s%-8.1f%-6d\n",p->id,p->name,p->author,p->press,p->price,p->count);
}
}
void read()
{
n=0;
if((fp=fopen("bok.txt","rb"))==NULL){
printf("输入有误,不存在该文件!!\n\n");
return;
}
do{
if(fread(&bk[n],sizeof(struct book),1,fp)!=1){
if(feof(fp)){
print();
printf("文件读取成功!\n");
printf("press any key to continue!");
getch();
return;
}
else printf("文件读取失败!");
}
n++;
}while(1);
fclose(fp);
}
void save()
{
int i;
if((fp=fopen("bok.txt","wb"))==NULL){
printf("不能保存文件!");
return;
}
else{
for(i=0;i<n;i++)
if(fwrite(&bk[i],sizeof(struct book),1,fp)!=1)
printf("文件保存成功!");
fclose(fp);
}
}
void insert()
{
char c,d;
int t,a,i,j=0;
struct book temp;
read();
/*printf("Please enter the number for insert: ");
scanf("%d", &n);
for(i=0; i<m; i++)
if(n==student[i].number)
{
j=i+1;
printf("Number: %d Name: %s Sex: %s Age: %d Score: %d Address: %s \n",student[i].number, student[i].name, student[i].sex,student[i].age, student[i].score, student[i].addr);
}
if(j==0)
{
printf("No this record.");
break;
}
fflush(stdin);
printf("Insert behind number %d ?(y/n): ", n);
scanf("%c",&c);
if (c=='n' || c=='N')
continue;
temp=student[j];
printf("Number: ");
scanf("%d", &student[j].number);
printf("Name: ");
scanf("%s", student[j].name);
printf("Sex: ");
scanf("%s", student[j].sex);
printf("Age:\n");
scanf("%d", &student[j].age);
printf("Score: ");
scanf("%d", &student[j].score);
printf("Address: ");
scanf("%s", student[j].addr);
for(t=m+1; t>j; t--)
{student[t+1]=student[t];
}
student[j+1]=temp;
fflush(stdin);
printf("Do you want to insert continue?(y/n): ");
scanf("%c",&c);
}while ( c== 'y' || c== 'Y' );*/
do{
fflush(stdin);
printf("请输入要在后面插入的图书号:");
scanf("%d",&a);
for(i=0;i<n;i++)
if(bk[i].id==a)j=i+1;
if(j==0){
printf("不存在该纪录!");
getch();
break;
}
fflush(stdin);
printf("你确认要在%d后插入吗?(y/n)",a);
scanf("%c",&d);
if(d=='n'||d=='N') continue;
temp=bk[j];
printf("\n请输入图书的书号:");
scanf("%d",&bk[j].id);
printf("请输入书名:");
scanf("%s",bk[j].name);
printf("请输入作者:");
scanf("%s",bk[j].author);
printf("请输入出版社:");
scanf("%s",bk[j].press);
printf("请输入价格:");
scanf("%f",&bk[j].price);
printf("请输入书的数目");
scanf("%d",&bk[j].count);
for(i=n+1;i>j;i--)
bk[i+1]=bk[t];
bk[i+1]=temp;
n++;
printf("继续录入?(按y继续,其他退出)");
c=getchar();
printf("\n");
}while(c=='y'||c=='Y');
printf("数据已成功输入!\n");
}
void deleter()
{
int id,i,flag=1;
fflush(stdin);
printf("请输入图书号:");
scanf("%d",&id);
for(i=0;i<n;i++)
if(bk[i].id==id){
bk[i]=bk[n-1];
n--;
flag=0;
}
if(flag)
printf("输入有误,不存在该书的数据!!\n");
printf("\t已成功删除该书的数据!");
getchar();
getchar();
}
void change()
{
int i,id;
char c;
printf("请输入要更改的图书的书号:");
scanf("%d",&id);
do{
for(i=0;i<n;i++)
if(bk[i].id==id){
printf("\n请输入图书的书号:");
scanf("%d",&bk[n].id);
printf("请输入书名:");
scanf("%s",bk[n].name);
printf("请输入作者:");
scanf("%s",bk[n].author);
printf("请输入出版社:");
scanf("%s",bk[n].press);
printf("请输入价格:");
scanf("%f",&bk[n].price);
printf("请输入书的数目");
scanf("%d",&bk[n].count);
}
else {
printf("不存在的纪录!");
getchar();
break;
}
printf("继续更改吗?");
c=getchar();
}while(c=='y'||c=='Y');
printf("数据已成功更改!\n");
}
void sort()
{
int i,j;
struct book temp;
for(i=0;i<n-2;i++)
for(j=0;j<=n-2-i;j++)
if(bk[j].id<bk[j+1].id){
temp=bk[j];
bk[j]=bk[j+1];
bk[j+1]=temp;
}
}
int main()
{
int s;
do{
system("cls");
printf("***************************************************\n");
printf("*** 欢迎使用图书管理系统 ***\n");
printf("*** 2.读入数据 ***\n");
printf("*** 3.保存数据 ***\n");
printf("*** 4.插入数据 ***\n");
printf("*** 5.删除数据 ***\n");
printf("*** 6.更改数据 ***\n");
printf("*** 7.对数据进行排序 ***\n");
printf("*** 8.退出 ***\n");
printf("***************************************************\n");
printf("请输入你的选择:");
scanf("%d",&s);
switch(s){
case 2 : read(); break;
case 3 : save(); break;
case 4 : insert(); break;
case 5 : deleter(); break;
case 6 : change(); break;
case 7 : sort(); break;
}
}while (s!=8);
return 0;
}
现在遇到的一个问题是:当我运行插入函数时,当输入最后一个数据也就是书数量,就跳出错误,
要向微软发送错误信息,我晕
帮忙看看!!!小弟先谢了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void creat();
void read();
void save();
void insert();
void deleter();
void change();
void sort();
void print();
#define FORMAT "%"
int n=0;
FILE *fp;
struct book{
int id;
char name[20];
char author[20];
char press[20];
float price;
int count;
}bk[100];
struct book *p;
void print()
{
printf("书号 书名 作者 出版社 价格 数量\n");
for(p=bk;p<=bk+n;p++){
printf("%-8d%-8s%-8s%-10s%-8.1f%-6d\n",p->id,p->name,p->author,p->press,p->price,p->count);
}
}
void read()
{
n=0;
if((fp=fopen("bok.txt","rb"))==NULL){
printf("输入有误,不存在该文件!!\n\n");
return;
}
do{
if(fread(&bk[n],sizeof(struct book),1,fp)!=1){
if(feof(fp)){
print();
printf("文件读取成功!\n");
printf("press any key to continue!");
getch();
return;
}
else printf("文件读取失败!");
}
n++;
}while(1);
fclose(fp);
}
void save()
{
int i;
if((fp=fopen("bok.txt","wb"))==NULL){
printf("不能保存文件!");
return;
}
else{
for(i=0;i<n;i++)
if(fwrite(&bk[i],sizeof(struct book),1,fp)!=1)
printf("文件保存成功!");
fclose(fp);
}
}
void insert()
{
char c,d;
int t,a,i,j=0;
struct book temp;
read();
/*printf("Please enter the number for insert: ");
scanf("%d", &n);
for(i=0; i<m; i++)
if(n==student[i].number)
{
j=i+1;
printf("Number: %d Name: %s Sex: %s Age: %d Score: %d Address: %s \n",student[i].number, student[i].name, student[i].sex,student[i].age, student[i].score, student[i].addr);
}
if(j==0)
{
printf("No this record.");
break;
}
fflush(stdin);
printf("Insert behind number %d ?(y/n): ", n);
scanf("%c",&c);
if (c=='n' || c=='N')
continue;
temp=student[j];
printf("Number: ");
scanf("%d", &student[j].number);
printf("Name: ");
scanf("%s", student[j].name);
printf("Sex: ");
scanf("%s", student[j].sex);
printf("Age:\n");
scanf("%d", &student[j].age);
printf("Score: ");
scanf("%d", &student[j].score);
printf("Address: ");
scanf("%s", student[j].addr);
for(t=m+1; t>j; t--)
{student[t+1]=student[t];
}
student[j+1]=temp;
fflush(stdin);
printf("Do you want to insert continue?(y/n): ");
scanf("%c",&c);
}while ( c== 'y' || c== 'Y' );*/
do{
fflush(stdin);
printf("请输入要在后面插入的图书号:");
scanf("%d",&a);
for(i=0;i<n;i++)
if(bk[i].id==a)j=i+1;
if(j==0){
printf("不存在该纪录!");
getch();
break;
}
fflush(stdin);
printf("你确认要在%d后插入吗?(y/n)",a);
scanf("%c",&d);
if(d=='n'||d=='N') continue;
temp=bk[j];
printf("\n请输入图书的书号:");
scanf("%d",&bk[j].id);
printf("请输入书名:");
scanf("%s",bk[j].name);
printf("请输入作者:");
scanf("%s",bk[j].author);
printf("请输入出版社:");
scanf("%s",bk[j].press);
printf("请输入价格:");
scanf("%f",&bk[j].price);
printf("请输入书的数目");
scanf("%d",&bk[j].count);
for(i=n+1;i>j;i--)
bk[i+1]=bk[t];
bk[i+1]=temp;
n++;
printf("继续录入?(按y继续,其他退出)");
c=getchar();
printf("\n");
}while(c=='y'||c=='Y');
printf("数据已成功输入!\n");
}
void deleter()
{
int id,i,flag=1;
fflush(stdin);
printf("请输入图书号:");
scanf("%d",&id);
for(i=0;i<n;i++)
if(bk[i].id==id){
bk[i]=bk[n-1];
n--;
flag=0;
}
if(flag)
printf("输入有误,不存在该书的数据!!\n");
printf("\t已成功删除该书的数据!");
getchar();
getchar();
}
void change()
{
int i,id;
char c;
printf("请输入要更改的图书的书号:");
scanf("%d",&id);
do{
for(i=0;i<n;i++)
if(bk[i].id==id){
printf("\n请输入图书的书号:");
scanf("%d",&bk[n].id);
printf("请输入书名:");
scanf("%s",bk[n].name);
printf("请输入作者:");
scanf("%s",bk[n].author);
printf("请输入出版社:");
scanf("%s",bk[n].press);
printf("请输入价格:");
scanf("%f",&bk[n].price);
printf("请输入书的数目");
scanf("%d",&bk[n].count);
}
else {
printf("不存在的纪录!");
getchar();
break;
}
printf("继续更改吗?");
c=getchar();
}while(c=='y'||c=='Y');
printf("数据已成功更改!\n");
}
void sort()
{
int i,j;
struct book temp;
for(i=0;i<n-2;i++)
for(j=0;j<=n-2-i;j++)
if(bk[j].id<bk[j+1].id){
temp=bk[j];
bk[j]=bk[j+1];
bk[j+1]=temp;
}
}
int main()
{
int s;
do{
system("cls");
printf("***************************************************\n");
printf("*** 欢迎使用图书管理系统 ***\n");
printf("*** 2.读入数据 ***\n");
printf("*** 3.保存数据 ***\n");
printf("*** 4.插入数据 ***\n");
printf("*** 5.删除数据 ***\n");
printf("*** 6.更改数据 ***\n");
printf("*** 7.对数据进行排序 ***\n");
printf("*** 8.退出 ***\n");
printf("***************************************************\n");
printf("请输入你的选择:");
scanf("%d",&s);
switch(s){
case 2 : read(); break;
case 3 : save(); break;
case 4 : insert(); break;
case 5 : deleter(); break;
case 6 : change(); break;
case 7 : sort(); break;
}
}while (s!=8);
return 0;
}
#11
里面有一段是没用的。
#12
UP
#13
改用C++来写^_^