学生信息管理系统文件读写问题
本帖最后由 wuliangtdi 于 2019-3-5 23:03 编辑#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define N 100
int n=0;
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
return 0;
}
//*登入界面模块*//
void Login()
{
int i=0;
char Administrator[] = {"admin"};//*管理员账号*//
char password[] = {"admin"}; //*管理员密码*//
char a={0}; //*用户自己输入的账号*//
char b={0}; //*用户自己输入的密码*//
color(3);
for(i=0;i<3;i++)
{
printf("请输入管理员账号:\n");
scanf("%s",a);
printf("请输入管理员密码:\n");
scanf("%s",b);
if(!strcmp(Administrator,a)&&!strcmp(password,b))
{
break;
}
else
{
i++;
printf("您输入的账号或密码有误请重新输入,您还有%d次机会输入:\n",3-i);
}
if(i==3)
{
printf("退出系统\n");
}
}
system("cls");
}
//*开始菜单*//
void menu()
{
color(12);
printf("\n\n\n\n\n");
printf("\t\t|-------------------------开始菜单------------------------|\n");
printf("\t\t|\t\t1.输入学生信息 |\n");
printf("\t\t|\t\t2.查询学生信息 |\n");
printf("\t\t|\t\t3.显示学生信息 |\n");
printf("\t\t|\t\t3.删除学生信息 |\n");
printf("\t\t|\t\t4.修改学生信息 |\n");
printf("\t\t|\t\t5.插入学生信息 |\n");
printf("\t\t|\t\t6.学生的总人数 |\n");
printf("\t\t|\t\t0.退出系统 |\n");
printf("\t\t|---------------------------------------------------------|\n");
}
//*学生信息结构体*//
struct Student
{
char name; //学生姓名*//
char sex; //*学生性别//
char number; //*学生学号*//
intage; //*学生年龄*//
char phone; //*学生电话*//
char id; //*学生身份证*//
char mail; //*学生的邮箱*//
char address; //*学生的家庭住址*//
char born; //*学生出生年月*//
}stu;
//*学生读入信息*//
void read()
{
int i=0; //*选择是否继续输入*//
FILE *fp;
if((fp=fopen("D:\\date.txt","r"))==NULL)
{
printf("对不起,文件不存在。请在D盘下新建一个名叫date.txt文件");
system("pause");
system("cls");
return;
}
fscanf(fp,"%d\n",&n);
while(i < n)
{
fscanf(fp,"%s\n",stu.name);
fscanf(fp,"%s\n",stu.sex);
fscanf(fp,"%s\n",stu.number);
fscanf(fp,"%s\n",stu.phone);
fscanf(fp,"%d\n",&stu.age);
fscanf(fp,"%s\n",stu.id);
fscanf(fp,"%s\n",stu.mail);
fscanf(fp,"%s\n",stu.address);
fscanf(fp,"%s",stu.born);
i++;
}
fclose(fp);
}
//*学生信息写入*//
voidwrite()
{
FILE *fp;
int i=0;
if((fp=fopen("D:\\date.txt","w"))==NULL)
{
printf("无法打开文件\n");
return;
}
fprintf(fp,"%d",n);
while(i<n)
{
fprintf(fp,"%s\n",stu.name);
fprintf(fp,"%s\n",stu.sex);
fprintf(fp,"%s\n",stu.number);
fprintf(fp,"%s\n",stu.phone);
fprintf(fp,"%d\n",stu.age);
fprintf(fp,"%s\n",stu.id);
fprintf(fp,"%s\n",stu.address);
fprintf(fp,"%s\n",stu.born);
i++;
}
fclose(fp);
}
void input()
{
int i;
int flag; //*标记学号是否已存在*//
char c; //*指令Y?N*//
read();
color(9);
do
{
flag = 0;
printf("\t\t请输入学生的学号: \n\t\t");
scanf("%s",stu.number);
printf("hello world");
for(i = 0 ; i < n ; i ++)
{ if(strcmp(stu.number,stu.number) == 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请输入第%d名学生姓名:\n\t\t",i+1);
scanf("%s",stu.name);
printf("\t\t请输入第%d名学生性别:\n\t\t",i+1);
scanf("%s",stu.sex);
printf("\t\t请输入第%d名学生电话:\n\t\t",i+1);
scanf("%s",stu.phone);
printf("\t\t请输入第%d名学生年龄:\n\t\t",i+1);
scanf("%d",&stu.age);
printf("\t\t请输入第%d名学生身份证:\n",i+1);
scanf("%s",stu.id);
printf("\t\t请输入第%d名学生邮箱:\n\t\t",i+1);
scanf("%s",stu.mail);
printf("\t\t请输入第%d名学生家庭地址:\n\t\t",i+1);
scanf("%s",stu.address);
printf("\t\t请输入第%d名学生出生年月日:\n\t\t",i+1);
scanf("%s",stu.born);
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",stu.number);
printf("\t\t 姓名: %s\n",stu.name);
printf("\t\t 性别: %s\n",stu.sex);
printf("\t\t 出生年月: %s\n",stu.born);
printf("\t\t 电话: %s\n",stu.phone);
printf("\t\t 年龄: %d\n",stu.age);
printf("\t\t 身份证: %s\n",stu.id);
printf("\t\t 家庭住址: %s\n",stu.address);
printf("\t\t 邮箱: %s\n",stu.mail);
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_number ;//查询学号
char q_name ;//查询姓名
char q_id ; //查询身份证
char c;//指令Y?N
read();//打开程序后,要查询以前的数据,要先读入
color(9);
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* 3.按身份查询 *\n");
printf("\t\t******************************************\n");
printf("\t\t* 输入其他任意键退出本模块 *\n");
printf("\t\t******************************************\n");
printf("\t\t请输入指令(1-3):");
scanf("%*c%c",&num);
if(num < '1' || num > '3')
{
printf("错误指令!\n\n");
system("pause");
break;
}
system("cls");
flag = 0;//用来标记学生信息是否存在
if(num == '1')//按学号查询
{
printf("\t\t请输入您要查询学生的学号:");
scanf("%s",q_id);
for(i = 0 ; i < n ;i ++)
{
if( strcmp(stu.number,q_number) == 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(stu.name,q_name) == 0)
{
output_inf(i);
flag = 1;//标记
}
}
}
else if(num == '3')//按身份证查询
{
printf("\t\t请输入您要查询学生的身份证:");
scanf("%s",q_id);
for(i = 0 ; i < n ;i ++)
{
if( strcmp(stu.id,q_id) == 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;
}
}
int main()
{
int i;
Login();
menu();
printf("请输入0~7继续操作:\n");
scanf("%d",&i);
switch(i)
{
case 1: input();break;
case 2: que();break;
case 3: show();break;
case 4: printf("删除数据\n");break;
case 5: printf("数据排序数据\n");break;
case 6: printf("保存期数据\n");break;
default: printf("输入无效\n");
}
}
第一次输入学生的信息时可以直接运行并保存,但是重新输入学生信息或者查询显示学生信息会直接停止工作,我感觉是文件读写那里有问题,找了两个多小时都找不到问题,希望大神能够指点一下。{:5_92:} 额,请问你是哪里有问题,我运行你的程序,没有出现你所说的问题,当然bug还是很多的,我之前也写过一个类似的,如果需要,我可以把我的程序给你参考一下
建议你加一个返回菜单的函数,这样就不用每次查看就得重新运行一下程序 一般文件输入输出流出现错误的话,基本上是一下几点
1、权限不够
2、要删除的程序正打开着,运行着(流没关)
3、磁盘出现错误
4、是共享文件,被远程机器打开着
之前写程序的时候,第2点是犯错误最多的 暗pluto 发表于 2019-3-5 15:25
额,请问你是哪里有问题,我运行你的程序,没有出现你所说的问题,当然bug还是很多的,我之前也写过一个类 ...
真的吗?如果能发的话就真的太好了! 在这里,程序还不算完善,仅供参考 复制试试
页:
[1]