C语言问题 文件的 100
2015-06-17
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUFLEN 120
#define LEN 20
#define N 5
struct record //结构体
{
char number[LEN]; //帐号
char name[LEN]; // 姓名(name)
int noc; //余额
char bri[6]; //密码
}meb[N];
int k=1,n,m,i; // 定义全局变量
void readfile(); //读入
void seek(); //查找
void modify(); //修改
void display(); //显示
void save(); //保存
void menu(); //菜单
void to_menu(); //回到菜单
main() //主函数
{
int num;
menu();
while(1)
{
printf("请输入功能号[1-6]:");
scanf("%d",&num);
switch(num)
{
case 1:readfile();break; //主菜单选项
case 2:seek();break;
case 3:modify();break;
case 4:display();break;
case 5:save();break;
case 6:k=0;break;
default:printf("请在1-6之间选择\n");
}
if(k==0) break;
to_menu();
}
return(0);
}
void readfile() // 读入信息 (第十章 文件)
{
char *p="customer.txt"; //打开文件
FILE *fp;
int i=0;
if ((fp=fopen("customer.txt","r"))==NULL)
{
printf("打开 %s 失败! 按回车键返回主菜单!",p);
return;
to_menu();
}
while(fscanf(fp,"%s%s%d%s",meb[i].number,meb[i].name,&meb[i].noc, meb[i].bri)==4)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf("录入完毕! \n");
}
void seek() //查询
{
int i,item,flag;
char s1[21]; //查询菜单选项
printf("------------------ ╭┴┴-----┴┴╮ \n");
printf("1按帐号查询 │ │ \n");
printf(" │ ● ● │\n");
printf(" │○╰┬┬┬╯ ○│\n");
printf("2.退出本菜单 │ ╰-╯ / \n");
printf("------------------ ╰-┬○----┬○╯ \n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item) //查询菜单选项
{
case 1://按帐号查询
printf("请输入要查询的工号\n");
scanf("%s",&s1);
for(i=0;i<n;i++)
if(strcmp(meb[i].number,s1)==0)
{
flag=1;
printf("该客户帐号,姓名,余额,密码 分别为:\n");
printf(" %s %s %d %s \n",meb[i].number,meb[i].name,meb[i].noc, meb[i].bri);
}
if(flag==0)
printf("该帐号不存在!\n"); break;
case 2:return;
default:printf("请在1-2之间选择\n");
}
}
}
void modify() //修改帐号信息
{
int i,item,num;
char s1[LEN+1],s2[LEN+1]; //长度根据实际情况定义
printf("请输入要要修改的帐号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(meb[i].number,s1)==0)
num=i;
printf("------------------ ╭╮__╭╭╭╭╭__╭╮ \n"); //修改项目
printf("1.修改姓名 │ │ \n");
printf("2.修改余额 │ │\n");
printf("3.修改帐号 │ . ╭---╮ . │\n");
printf("4.修改密码 │≡ │● ●│ ≡│\n");
printf(" ╰ --- ╯ ╯ \n");
printf(" ╰--┬○----┬-○------╯ \n");
printf("5.退出本菜单 \n");
printf("------------------ \n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s",s2);
strcpy(meb[num].name,s2); break;
case 2:
printf("请输入余额变更:\n");
scanf("%d",&k);
meb[num].noc=k+meb[num].noc;
break;
case 3:
printf("请输入新的帐号:\n");
scanf("%s",s2);
strcpy(meb[num].bri,s2); break;
case 4:printf("请输入新的密码\n");
scanf("%s",s2);
strcpy(meb[num].number,s2);
case 5:return;
default:printf("请在1-5之间选择\n");
}
}
}
void display() //显示员工信息
{
int i;
printf("所有客户的信息为:\n");
printf("客户帐号,姓名,余额,密码分别为:\n");
for(i=0;i<n;i++)
{
printf(" %s %s %d %s\n",meb[i].number,meb[i].name,meb[i].noc,meb[i].bri);
}
}
void save() //保存信息
{
int i,flag=0;
FILE *fp;
fp=fopen("customer2.txt","w"); //文件写入
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %d %s \n",meb[i].number,meb[i].name,meb[i].noc,meb[i].bri);
} fclose(fp);
}
void menu() //主界面
{
system("cls");//清屏
printf(" ╔══════════════════════════════════╗\n");
printf(" ║ 客户信息管理系统 ║\n");
printf(" ║ 制作人员:LostBoys Stduio _/ ̄\ ║\n");
printf(" ║ ****系统功能菜单***** ┬┴┬┴▏ ▔▔▔▔ \ ║\n");
printf(" ║ ▄︻┻═┳一一 ┴┬┴/\ / \ ║\n");
printf(" ║ 1.读入工会成员信息 ┬┴∕ / ) ║\n");
printf(" ║ 2.查询工会成员信息 ┴┬▏ ● ▏ ║\n");
printf(" ║ 3.按客户帐号修改信息 ┬┴▏ ▔█◤ ║\n");
printf(" ║ ┴◢██◣ \__ / ║\n");
printf(" ║ ┬█████◣ / ║\n");
printf(" ║ 4.显示当前客户信息 ┴█████████████◣ ║\n");
printf(" ║ 5.保存(数据无价,务必保存) ◢██████████████◣ ║\n");
printf(" ║ 6.退出系统 ◢███████████████◣ ║\n");
printf(" ║ ▄︻┻═┳一一 ◢████████████████▄║\n");
printf(" ║ ║\n");
printf(" ╚══════════════════════════════════╝\n");
}
void to_menu()//用来返回主菜单函数的函数头
{
char c1,c2;
printf("\n\n\n按回车键返回主菜单...");
scanf("%c%c",&c1,&c2);
menu();//调用主菜单函数
}
晚安。
代码如下:
#include<stdio.h>
#include<stdlib.h>
struct custom
{
int id;
char name[128];
char pwd[128];
int balance;
};
int main(){
char* fnIn = "D:/custom1.txt";
char* fnOut = "D:/custom2.txt";
custom customs[5];
FILE*fp = fopen(fnIn, "r");
for (int i = 0; i < 5; i++){
fscanf(fp, "%d ", &(customs[i].id));
fscanf(fp, "%s ", customs[i].name);
fscanf(fp, "%s ", customs[i].pwd);
fscanf(fp, "%d", &(customs[i].balance));
}
fclose(fp);
printf("所有客户信息如下:\n");
printf("账号\t姓名\t密码\t账户余额\n");
for (int i = 0; i < 5; i++){
printf("%d\t%s\t%s\t%d\n", customs[i].id, customs[i].name, customs[i].pwd, customs[i].balance);
}
printf("\n");
char ch;
do{
printf("\n选择操作:\n1=>根据账号查询客户信息\n2=>根据账号和输入的浅色更新客户余额\n3=>将所有客户信息写到数据文件custom2.txt中\n4=>退出\n");
ch = getchar();
int id, index;
switch (ch)
{
case '1':
printf("请输入账号:");
scanf("%d", &id);
for (int i = 0; i < 5; i++){
if (customs[i].id == id){
index = i;
break;
}
}
printf("账号\t姓名\t密码\t账户余额\n");
printf("%d\t%s\t%s\t%d\n", customs[index].id, customs[index].name, customs[index].pwd, customs[index].balance);
printf("查询完成!\n\n");
break;
case '2':
int input_money;
printf("输入账号和金额(以空格符为间隔):");
scanf("%d %d", &id, &input_money);
for (int i = 0; i < 5; i++){
if (customs[i].id == id){
index = i;
break;
}
}
customs[index].balance += input_money;
printf("更新完成!\n\n");
break;
case '3':
fp = fopen(fnOut, "w");
for (int i = 0; i < 5; i++){
fprintf(fp, "%d %s %s %d\n", customs[i].id, customs[i].name, customs[i].pwd, customs[i].balance);
}
fclose(fp);
printf("写入完成!\n\n");
break;
default:
break;
}
getchar();
} while (ch != '4');
return 0;
}
运行结果如下:
文件内容如下:
//D:/custom1.txt
1 客户1 123456 999
2 客户2 123456 998
3 客户3 123456 997
4 客户4 123456 996
5 客户5 123456 995
//D:/custom2.txt
1 客户1 123456 999
2 客户2 123456 998
3 客户3 123456 997
4 客户4 123456 895
5 客户5 123456 995
望采纳~
原因是你的编译器较老,不支持省去struct关键字的结构体变量声明
你把
custom customs[5];
改为
struct custom customs[5];
就可以了