将,来也 2019-09-18 10:27 采纳率: 0%
浏览 281

这个程序还有一些不足,请帮我改善改善,另外还有个小问题,可否帮忙更改一下?

#include
#include
#include
#include
struct worker
{
char ID[20];//工号
char name[20];//姓名
char Wage_card_number[20];//工资卡号
char month[12];//月份
char wage[10];//应发工资
char fees[100];//水费
char bill[100];//电费
}work[1000];
int n ;

//文件读写模块
void read()//读入数据
{
FILE *fp;
int i = 0;
if( (fp = fopen("d:\date.txt","r")) == NULL )
{
printf("请在D盘根目录下新建一个文本文件,文件名为date\n\n\n");
system("pause");
system("cls");
return ;
}
fscanf(fp,"%d\n",&n);
while(i < n)
{
fscanf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].Wage_card_number,work[i].month,work[i].wage,work[i].fees,work[i].bill);
i ++;
}
fclose(fp);
}
void write()//写入数据
{
FILE *fp;
int i = 0;
if( (fp = fopen("d:\date.txt","w")) == NULL )
{
printf("无法打开文件!\n");
return ;
}
fprintf(fp,"%d\n",n);
while(i < n)
{
fprintf(fp,"%s\n%s\n%s%s\n\n%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].Wage_card_number,work[i].month,work[i].wage,work[i].fees,work[i].bill);
i ++;
}
fclose(fp);
}

//输入模块
void input()// 从键盘输入
{
int i;
int flag;//标记工号是否已存在
char c;//指令Y?N
read();//输入数据前先将文件中原有的数据读入
do
{
flag = 0;
printf("\t\t请输入职工的工号: \n\t\t");
scanf("%s",work[n].ID);
for(i = 0 ; i < n ; i ++)
{
if(strcmp(work[i].ID,work[n].ID) == 0)
{
flag = 1;
break;
}
}
if(flag)
{
printf("该工号已存在!\n\n");
printf("\t\t是否继续输入?(Y/N): ");
scanf("%*c%c",&c);
if(c == 'N' || c == 'n') break;
continue;
}
printf("\t\t请输入职工的姓名: \n\t\t");
scanf("%s",work[n].name);
printf("\t\t请输入职工的月份: \n\t\t");
scanf("%s",work[n].month);
printf("\t\t请输入职工的工资卡号: \n\t\t");
scanf("%s",work[n].Wage_card_number);
printf("\t\t请输入职工的应发工资: \n\t\t");
scanf("%s",work[n].wage);
printf("\t\t请输入职工的水费: \n\t\t");
scanf("%s",work[n].fees);
printf("\t\t请输入职工的电费: \n\t\t");
scanf("%s",work[n].bill);
printf("\t\t是否继续输入?(Y/N): ");
scanf("%*c%c",&c);
n ++;
}while( c != 'N' && c != 'n');
write();
printf("\n\n数据已保存!\n\n");
}

//显示模块
void output_inf(int id)
{
printf("\t\t 工号: %s\n",work[id].ID);
printf("\t\t 姓名: %s\n",work[id].name);
printf("\t\t 工资卡号: %s\n",work[id].Wage_card_number);
printf("\t\t 月份: %s\n",work[id].month);

printf("\t\t 应发工资: %s\n",work[id].wage);
printf("\t\t 水费: %s\n",work[id].fees);
printf("\t\t 电费: %s\n",work[id].bill);
printf("\n\n\n");
}
void show()//显示所有职工信息
{
int i;
read();
if(n == 0) printf("无记录!\n\n");
else
for(i = 0 ; i < n ; i ++)
{
output_inf(i);
}
}

//查询模块
void que()//查询信息
{
char num;
int flag,i;
char q_id[20] ;//查询工号
char q_name[20] ;//查询姓名
char c;//指令Y?N
read();//打开程序后,要查询以前的数据,要先读入
while(1)
{
system("cls");
printf("\t\t******************查询********************\n");
printf("\t\t* \n");
printf("\t\t
1.按工号查询 \n");
printf("\t\t
\n");
printf("\t\t
2.按姓名查询 \n");
printf("\t\t
\n");
printf("\t\t
输入其他任意键退出本模块 \n");
printf("\t\t
*****************************************\n");
printf("\t\t请输入指令(1-2):");
scanf("%*c%c",&num);
if(num < '1' || num > '2')
{
printf("错误指令!\n\n");
system("pause");
continue;
}
system("cls");
flag = 0;//用来标记职工信息是否存在
if(num == '1')//按工号查询
{
printf("\t\t请输入您要查询职工的工号:");
scanf("%s",q_id);
for(i = 0 ; i < n ;i ++)
{
if( strcmp(work[i].ID,q_id) == 0)
{
output_inf(i);
flag = 1;//标记
break;
}
}
}
else if(num == '2')//按姓名查询
{
printf("\t\t请输入您要查询职工的姓名:");
scanf("%s",q_name);
for(i = 0 ; i < n ;i ++)
{
if( strcmp(work[i].name,q_name) == 0)
{
output_inf(i);
flag = 1;//标记
}
}
}
if(!flag)//判断是否有该职工信息
{
printf("\n\n无该职工信息!\n\n");
}
printf("\n\n是否继续查询(Y/N):");

scanf("%*c%c",&c); 
if(c == 'N' || c == 'n') break; 

}
}

void del()//删除职工信息
{
char delete_ID[20];//删除职工工号
int i,j;
int flag;//标记是否有该职工信息
char c;
read();
while(1)
{
system("cls");
flag = 0;
printf("请输入需删除职工信息的工号:");
scanf("%s",delete_ID);
for(i = 0 ; i < n ; i ++)
{
if( strcmp(work[i].ID,delete_ID) == 0)
{
n --;
flag = 1;
for(j = i ; j < n ; j ++)
{
work[j] =work[j + 1];
}
break;
}
}
if(!flag) printf("\n\n无此员工信息!\n\n");
else printf("\n\n删除成功!\n");
printf("\n\n是否继续删除(Y/N):");
scanf("%*c%c",&c);
if(c == 'N' || c == 'n') break;
}
write();
}

//菜单模块
void menu()//菜单
{
printf("\t\t************职工信息管理系统菜单**********\n");
printf("\t\t* \n");
printf("\t\t
1.添加职工信息 \n");
printf("\t\t
\n");
printf("\t\t
2.浏览职工信息 \n");
printf("\t\t
\n");
printf("\t\t
3.查询职工信息 \n");
printf("\t\t
\n");
printf("\t\t
4.删除职工信息 \n");
printf("\t\t
\n");

printf("\t\t
0.退出 \n");
printf("\t\t
\n");
printf("\t\t
*****************************************\n");
printf("\t\t请输入指令(0-4): ");
}

int main()
{
int num;
n = 0;
system("color 0B");
while(1)
{
menu();
scanf("%d",&num);
system("cls");
switch(num)
{
case 1: input(); break;
case 2: show(); break;
case 3: que(); break;
case 4: del(); break;
case 0: printf("谢谢使用!\n\n"); return 0;
default :printf("\n--->无效的指令!\n\n\n");
}
system("pause");
system("cls");
}
}
图片说明
这个电费显示不出来是怎么回事,请予以修改。

  • 写回答

1条回答 默认 最新

  • csdnQiPa 2019-09-18 10:54
    关注

    可能是编码的问题,没仔细看,你换个编码可能就显示,而且要注意&的使用

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?