回 帖 发 新 帖 刷新版面

主题:C语言程序求教

#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
int shoudsave=0; /* */ 
struct book 

char num[10]; 
char name[20]; 
char writer[6]; 
int sh; 
char cbdw[10]; 
char cbtime[8]; 
int jg; 
}; 

typedef struct node 

struct book data; 
struct node *next; 
}Node,*Link; 

void menu() 

printf("\t1登记图书资料\t\t\t\t\t2删除图书资料\n"); 
printf("\t3查询图书资料\t\t\t\t\t4修改图书资料\n"); 
printf("\t5保存图书资料\t\t\t\t\t0退出系统\n"); 


void printstart() 

printf("-----------------------------------------------------\n"); 

void Wrong() 

printf("\n输入错误!\n"); 


void Nofind() 

printf("\n没有找到该书!\n"); 


void printe(Node *p)

printf("%s\t%s\t%s\t%s\t%s\t %s\t %s\n",p->data.num,p->data.name,p->data.writer,p->data.sh,p->data.cbdw,p->data.cbtime,p->data.jg); 

Node* Locate(Link l,char findmess[],char nameornum[]) 

Node *r; 
if(strcmp(nameornum,"num")==0) 

r=l->next; 
while(r!=NULL) 

if(strcmp(r->data.num,findmess)==0) 
return r; 
r=r->next; 


else if(strcmp(nameornum,"name")==0) 

r=l->next; 
while(r!=NULL) 

if(strcmp(r->data.name,findmess)==0) 
return r; 
r=r->next; 


return 0; 


void Add(Link l)

Node *p,*r,*s; 
char num[10]; 
r=l; 
s=l->next; 
while(r->next!=NULL) 
r=r->next; 
while(1) 

printf("请你输入登记号(以'0'返回上一级菜单:)"); 
scanf("%s",num); 
if(strcmp(num,"0")==0) 
break; 
while(s) 

if(strcmp(s->data.num,num)==0) 

printf("登记号为'%s'的图书已经存在,若要修改请你选择'4 修改'!\n",num); 
printstart(); 
printe(s); 
printstart(); 
printf("\n"); 
return; 

s=s->next; 


p=(Node *)malloc(sizeof(Node)); 

strcpy(p->data.num,num); 
printf("请你输入书名:"); 
scanf("%s",p->data.name); 
getchar(); 
printf("请你输入作者:"); 
scanf("%s",p->data.writer); 
getchar(); 
printf("请你输入分类号:"); 
scanf("%d",&p->data.sh); 
getchar(); 
printf("请你输入出版单位:"); 
scanf("%d",&p->data.cbdw); 
getchar(); 
printf("请你输入出版日期:"); 
scanf("%d",&p->data.cbtime); 
getchar(); 
/* 信息输入已经完成 */ 
p->next=NULL; 
r->next=p; 
r=p; 
shoudsave=1; 




void Qur(Link l) 

int sel; 
char findmess[20]; 
Node *p; 

if(!l->next) 

printf("\n没有资料可以查询!\n"); 
return; 



printf("\n=====>1按书名查找\n=====>2按作者查找\n"); 
scanf("%d",&sel); 
if(sel==1) 

printf("请你输入要查找的书名:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"name"); 
if(p) 

printf("\t\t\t\t查找结果\n"); 
printstart(); 
printe(p); 
printstart(); 

else 
Nofind(); 

else if(sel==2) 

printf("请你输入要查找的作者:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"writer"); 
if(p) 

printf("\t\t\t\t查找结果\n"); 
printstart(); 
printe(p); 
printstart(); 

else 
Nofind(); 

else 
Wrong(); 



void Del(Link l) 

int sel; 
Node *p,*r; 
char findmess[20]; 
if(!l->next) 

printf("\n没有资料可以删除!\n"); 
return; 

printf("\n====>1按登录号删除\n=====>2按书名删除\n"); 
scanf("%d",&sel); 
if(sel==1) 

printf("请你输入要删除的登记号:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 

r=l; 
while(r->next!=p) 
r=r->next; 
r->next=p->next; 
free(p); 
printf("\n该图书已经成功删除!\n"); 
shoudsave=1; 

else 
Nofind(); 

else if(sel==2) 

printf("请你输入要删除的书名:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"name"); 
if(p) 

r=l; 
while(r->next!=p) 
r=r->next; 
r->next=p->next; 
free(p); 
printf("\n该图书已经成功删除!\n"); 
shoudsave=1; 

else 
Nofind(); 

else 
Wrong(); 


void Modify(Link l) 

Node *p; 
char findmess[20]; 
if(!l->next) 

printf("\n没有资料可以修改!\n"); 
return; 

printf("请你输入要修改的登记号:"); 
scanf("%s",findmess); 
p=Locate(l,findmess,"num"); 
if(p) 

printf("请你输入新登记号(原来是%s):",p->data.num); 
scanf("%s",p->data.num); 
printf("请你输入新书名(原来是%s):",p->data.name); 
scanf("%s",p->data.name); 
getchar(); 
printf("请你输入新作者(原来是%s):",p->data.writer); 
scanf("%s",p->data.writer); 
printf("请你输入新分类号(原来是%d):",p->data.sh); 
scanf("%d",&p->data.sh); 
getchar(); 
printf("请你输入新出版单位(原来是%s):",p->data.cbdw); 
scanf("%d",&p->data.cbdw); 
getchar(); 
printf("请你输入新出版时间(原来是%s):",p->data.cbtime); 
scanf("%d",&p->data.cbtime);  
printf("\n资料修改成功!\n"); 
shoudsave=1; 

else 
Nofind(); 



void Disp(Link l) 

int count=0; 
Node *p; 
p=l->next; 

if(!p) 

printf("\n没有资料可以显示!\n"); 
return; 

printf("\t\t\t\t显示结果\n"); 
printstart(); 
printf("\n"); 
while(p) 

printe(p); 
p=p->next; 

printstart(); 
printf("\n"); 



void Save(Link l) 

FILE* fp; 
Node *p; 
int flag=1,count=0; 
fp=fopen("d:\book.txt","r+"); 
if(fp==NULL) 

printf("\n重新打开文件时发生错误!\n"); 
exit(1); 

p=l->next; 

while(p) 

if(fwrite(p,sizeof(Node),1,fp)==1) 

p=p->next; 
count++; 

else 

flag=0; 
break; 


if(flag) 

printf("\n文件保存成功.(有%d条记录已经保存.)\n",count); 
shoudsave=0; 

fclose(fp); 


void main() 

Link l; 
FILE *fp; 
int sel; 
char ch; 
char jian; 

int count=0; 
Node *p,*r; 
printf("\t\t\t\t图书信息管理系统\n\t\t\t\t\n"); 
l=(Node*)malloc(sizeof(Node)); 
l->next=NULL; 
r=l; 

fp=fopen("d:\book.txt","r+"); 
if(fp==NULL) 

printf("\n文件还不存在,是否创建?(y/n)\n"); 
scanf("%c",&jian); 
if(jian=='y'||jian=='Y') 
fp=fopen("D:\book.txt","r+"); 
else 
exit(0); 

printf("\n文件已经打开,正在导入记录......\n"); 

while(!feof(fp)) 

p=(Node*)malloc(sizeof(Node)); 
if(fread(p,sizeof(Node),1,fp))  

p->next=NULL; 
r->next=p; 
r=p;  
count++; 



fclose(fp); 
printf("\n记录导入完毕,共导入%d条记录.\n",count); 

while(1) 

menu(); 
printf("请你选择操作:"); 
scanf("%d",&sel); 

if(sel==0) 

if(shoudsave==1) 
{ getchar(); 
printf("\n资料已经改动,是否将改动保存到文件中(y/n)?\n"); 
scanf("%c",&ch); 
if(ch=='y'||ch=='Y') 
Save(l); 

printf("\n你已经退出系统\n"); 
break; 

switch(sel) 

case 1:Add(l);break; 
case 2:Del(l);break; 
case 3:Qur(l);break; 
case 4:Modify(l);break; 
case 5:Save(l);break;
default: Wrong();getchar();break; 



为什么这个程序在开始运行后,选择创建文件就会出错呢?
请各位大哥帮帮小弟,不胜感激。

回复列表 (共6个回复)

沙发

if(fp==NULL) 

printf("\n文件还不存在,是否创建?(y/n)\n"); 
scanf("%c",&jian); 
if(jian=='y'||jian=='Y') 
fp=fopen("D:\\book.txt","w+"); ////////////
else 
exit(0); 
}

板凳

又是抄来的,哎

3 楼

    if(fp==NULL) 
    { 
        printf("\n文件还不存在,是否创建?(y/n)\n"); 
        scanf("%c",&jian); 
        if(jian=='y'||jian=='Y') 
            fp=fopen("D:\\book.txt","w+");   
        else 
            exit(0); 
    } 
把那"r+"改成"w+"

4 楼

你的编辑器没有缩进功能吗?这代码你自己看着不费劲?

5 楼

第四行就错了.........

6 楼

谢谢楼主了,请继续努力
















[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册