当前位置:编程学习 > C/C++ >>

C语言文件保存、读入及查询

以下我根据老师的程序修改的学生餐卡管理系统!但是文件能保存,保存后不能查询,估计是读的时候或者是查询两个函数错了!急求指教。。。。
#include
#include
#include
#include
#include
void addnewcard(); /*添加用户*/
void searchcard();
void writetofile(); /*查询用户*/
void readfile(); /*读取文件*/
void deletecard(); /*删除用户*/
void addbalance(); /* 充值 */
void charge();
int num=0; /* 收费 */
struct Record
{
char cardnumber[10];
char name[20];
char phone[20];
char classn[40];
int balance;
}
student[500];
void main() /* 主函数 */
{

char choic;
printf("\n\t\t**********欢迎进入学生餐卡管理系统 *****************");
printf("\n\n\t\t**************设计人:周学鹏 ********************");
printf("\n\n\t\t*********** 时间:2011年07月10日 ****************");
printf("\n\n\n") ;
readfile(); /*读取文件*/
do
{


MARK:printf("\n\t\t******************** 主菜单 ********************");
printf("\n\n\t\t*********** 1-添加用户 2-查询用户 ************");
printf("\n\n\t\t*********** 3- 充 值 4- 消 费 ************");
printf("\n\n\t\t*********** 5-删除用户 6-退出系统 ************");
printf("\n\n\t\t************************************************");
printf("\n\n\t\t请选择:(1 2 3 4 5 6)!");
choic=getch();
switch (choic)
{
case '1':addnewcard();writetofile();break;
case '2':searchcard();break;
case '3':addbalance();writetofile();break;
case '4':charge();writetofile();break;
case '5':deletecard();writetofile();break;
case '6':exit(0);
default:("输入错误,请重新输入!");goto MARK;break;
}
} while(1);
}

void addnewcard() /*添加用户*/
{
printf("\n\t\t*************** 请输入学生信息 ***************\n");
printf("\n\t\t输入学号:");
scanf("%s",&student[num].cardnumber);
printf("\n\t\t输入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&student[num].phone);
printf("\n\t\t输入班级:");
scanf("%s",&student[num].classn);
printf("\n\t\t输入添加金额:");
scanf("%d",&student[num].balance);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
addnewcard();
return;
}
void searchcard() /*查询用户 */
{
int mark=0;
int i;
int a=0;
char cardnumber[10];
printf("\n\t\t***************** 按学号查找 *****************\n");
printf("\n\t\t请输入学号:");
scanf("%s",cardnumber);
for(i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)=='\0')
{
printf("\n\t\t************** 以下是您查找的学生信息 **********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);

printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t没有该学生的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void addbalance() /*充值*/
{
int i;
int m;
int a=0;
char cardnumber[10];
printf("\n\t\t*************** 按学号添加金额 ***************\n");

printf("\n\t\t请输入学号:");
scanf("%s",cardnumber);
for(i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)==0)
{
printf("\n\t\t************* 以下是您所选择学生信息 ***********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t是否添加金额?(y/n)");
if (getch()=='y')
{
printf("\n\t\t请输入你要添加金额:");
scanf("%d",&m);
printf("\t\t确认添加%d元给%s(y/n)?",m,student[i].name);
if (getch()=='y') {student[i].balance=student[i].balance+m;}
printf("\n\t\t添加金额成功");
}
printf("\n\t\t******** 以下是您选择学生添加金额后信息 ********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
void charge() /*收费*/
{
int i;
int k;
int a=0;
char cardnumber[10];
printf("\n\t\t***************** 按学号扣费 *****************\n");

printf("\n\t\t请输入学号:");
scanf("%s",cardnumber);
for(i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)==0)
{
printf("\n\t\t************** 以下是您选择学生信息 ************");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t是否扣除金额?(y/n)");
if (getch()=='y')
{
printf("\n\t\t请输入你要扣除金额:");
scanf("%d",&k);
printf("\t\t确认扣除%d元给%s?(y/n)",k,student[i].name);
if (getch()=='y')
{
student[i].balance=student[i].balance-k;
}
printf("\n\t\t扣除金额成功");
}
printf("\n\t\t****** 以下是您所选择学生扣除金额后信息 ********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
void deletecard() /*删除用户*/
{
int i,j;
int deletemark=0;
char cardnumber[10];
printf("\n\t\t请输入要删除学生学号:");
scanf("%s",cardnumber);
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)=='\0')
{
printf("\n\t\t以下是您要删除的学生纪录:");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);

printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
printf("\n\n\t\t!!!退还 %d 元给%s.!!!\n\n",student[i].balance,student[i].name);
for (j=i;j<num-1;j++) /*纪录移动,从stud数组中删除*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletecard();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t没有该同学的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletecard();
return;
}
}
void writetofile() /*保存文件*/
{
FILE *fp;
int i;

if((fp=fopen("student.txt","w"))==NULL)
{
printf("\n保存失败!");
exit(0);
}
for(i=0;i<num;i++)
{
fprintf(fp,"\t%s\t%s\t%s\t%s\t%d\t%d\n",
student[i].cardnumber,student[i].name,student[i].phone,student[i].classn,student[i].balance,num);
}
fclose(fp);
printf("\n\n学生信息已保存!\n");


}
void readfile()
{
FILE *fp;
int i;

if((fp=fopen("student.txt","r"))==NULL)
{
printf("\n〉〉〉〉〉〉暂无文件!\n");


return;
}


for(i=0;i<num&&!feof(fp);i++)
{
fscanf(fp,"\t%s\t%s\t%s\t%s\t%d\t%d\n",&student[i].cardnumber,&student[i].name,&student[i].phone,&student[i].classn,&student[i].balance,&num);
num++;
}
fclose(fp);
printf("保存在文件中的所有信息已经读入!\n");
printf("\n\n按任意键返回主菜单");
getch();
system("cls");
}
追问:谢谢哥们

不可以啊,哥们!我是说在关闭工作环境后,在运行此程序,上一次的数据仍能读出来啊!你这个跟我给的没什么区别吧!

答案:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>


void addnewcard(); /*添加用户*/
void searchcard();
void writetofile(); /*查询用户*/
void readfile(); /*读取文件*/
void deletecard(); /*删除用户*/
void addbalance(); /* 充值 */
void charge();
int num=0; /* 收费 */
struct Record
{
char cardnumber[10];
char name[20];
char phone[20];
char classn[40];
int balance;
}
student[500];
int main() /* 主函数 */
{


char choic;
printf("\n\t\t**********欢迎进入学生餐卡管理系统 *****************");
printf("\n\n\t\t**************设计人:周学鹏 ********************");
printf("\n\n\t\t*********** 时间:2011年07月10日 ****************");
printf("\n\n\n") ;
readfile(); /*读取文件*/
do
{




MARK:printf("\n\t\t******************** 主菜单 ********************");
printf("\n\n\t\t*********** 1-添加用户 2-查询用户 ************");
printf("\n\n\t\t*********** 3- 充 值 4- 消 费 ************");
printf("\n\n\t\t*********** 5-删除用户 6-退出系统 ************");
printf("\n\n\t\t************************************************");
printf("\n\n\t\t请选择:(1 2 3 4 5 6)!");
choic=getch();
switch (choic)
{
case '1':addnewcard();writetofile();break;
case '2':searchcard();break;
case '3':addbalance();writetofile();break;
case '4':charge();writetofile();break;
case '5':deletecard();writetofile();break;
case '6':exit(0);
default:("输入错误,请重新输入!");goto MARK;break;
}
} while(1);
}


void addnewcard() /*添加用户*/
{
printf("\n\t\t*************** 请输入学生信息 ***************\n");
printf("\n\t\t输入学号:");
scanf("%s",student[num].cardnumber);
printf("\n\t\t输入姓名:");
scanf("%s",student[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s",student[num].phone);
printf("\n\t\t输入班级:");
scanf("%s",student[num].classn);
printf("\n\t\t输入添加金额:");
scanf("%d",&student[num].balance);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
addnewcard();
return;
}
void searchcard() /*查询用户 */
{
int mark=0;
int i;
char cardnumber[10];
printf("\n\t\t***************** 按学号查找 *****************\n");
printf("\n\t\t请输入学号:");
scanf("%s",cardnumber);
for(i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)=='\0')
{
printf("\n\t\t************** 以下是您查找的学生信息 **********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);


printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t没有该学生的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void addbalance() /*充值*/
{
int i;
int m;
char cardnumber[10];
printf("\n\t\t*************** 按学号添加金额 ***************\n");


printf("\n\t\t请输入学号:");
scanf("%s",cardnumber);
for(i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)==0)
{
printf("\n\t\t************* 以下是您所选择学生信息 ***********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t是否添加金额?(y/n)");
if (getch()=='y')
{
printf("\n\t\t请输入你要添加金额:");
scanf("%d",&m);
printf("\t\t确认添加%d元给%s(y/n)?",m,student[i].name);
if (getch()=='y') {student[i].balance=student[i].balance+m;}
printf("\n\t\t添加金额成功");
}
printf("\n\t\t******** 以下是您选择学生添加金额后信息 ********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
void charge() /*收费*/
{
int i;
int k;
char cardnumber[10];
printf("\n\t\t***************** 按学号扣费 *****************\n");


printf("\n\t\t请输入学号:");
scanf("%s",cardnumber);
for(i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)==0)
{
printf("\n\t\t************** 以下是您选择学生信息 ************");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t是否扣除金额?(y/n)");
if (getch()=='y')
{
printf("\n\t\t请输入你要扣除金额:");
scanf("%d",&k);
printf("\t\t确认扣除%d元给%s?(y/n)",k,student[i].name);
if (getch()=='y')
{
student[i].balance=student[i].balance-k;
}
printf("\n\t\t扣除金额成功");
}
printf("\n\t\t****** 以下是您所选择学生扣除金额后信息 ********");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
void deletecard() /*删除用户*/
{
int i,j;
int deletemark=0;
char cardnumber[10];
printf("\n\t\t请输入要删除学生学号:");
scanf("%s",cardnumber);
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].cardnumber,cardnumber)=='\0')
{
printf("\n\t\t以下是您要删除的学生纪录:");
printf("\n\t\t学号: %s",student[i].cardnumber);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t班级: %s",student[i].classn);
printf("\n\t\t余额: %d",student[i].balance);


printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
printf("\n\n\t\t!!!退还 %d 元给%s.!!!\n\n",student[i].balance,student[i].name);
for (j=i;j<num-1;j++) /*纪录移动,从stud数组中删除*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletecard();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t没有该同学的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletecard();
return;
}
}
void writetofile() /*保存文件*/
{
FILE *fp;
int i;


if((fp=fopen("student.txt","w"))==NULL)
{
printf("\n保存失败!");
exit(0);
}
for(i=0;i<num;i++)
{
fprintf(fp,"\t%s\t%s\t%s\t%s\t%d\t%d\n",
student[i].cardnumber,student[i].name,student[i].phone,student[i].classn,student[i].balance,num);
}
fclose(fp);
printf("\n\n学生信息已保存!\n");




}
void readfile()
{
FILE *fp;
int i;


if((fp=fopen("student.txt","r"))==NULL)
{

上一个:C语言中的注册表操作函数有哪些?
下一个:求教C语言输出函数printf的问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,