#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
struct student
{
char name[10];
char num[20];
float chengji;
};
student stu[100];
char filename[20];
void menu_filename()
{
cout<<"请输入你要操作的学生表名:(若不存在将新建) ";
cin>>filename;
FILE *fp;
fp = fopen(filename, "r+");
if(fp == NULL)
cout<<"不存在该学生表"<<endl;
}
int denglu()
{
int k;
do
{
system("cls");//清屏
cout<<" 欢迎使用学生信息管理系统"<<endl;
cout<<endl;
cout<<endl;
cout<<" 1.建立学生表 2.查找学生信息"<<endl;
cout<<" 3.修改学生表 4.插入学生表"<<endl;
cout<<" 5.删除学生信息 6.退出该系统"<<endl;
cout<<" 请选择所要进行的操作(输入数字)"<<endl;
cin>>k;
}while(k<1||k>6);
return k;
}
void jianli()
{
FILE *fp;
int i=0,n=0;
char sign='y';
system("cls");
fp = fopen(filename, "a");
if((fp=fopen(filename,"a"))==NULL)//以2进制形式进行文件尾追加//
{
printf("cannot open the files\n");
system("pause");
return; //如果文件出现错误 就返回
}
while(sign!='n'&&sign!='N')
{
cout<<" 请依此输入学生的姓名、学号、成绩"<<endl;
cin>>stu[i].name>>stu[i].num>>stu[i].chengji;
printf("是否继续添加?(y/n)");//并未添加相关判断
scanf("\t%c",&sign);
fprintf(fp,"%s %s %f\n",stu[i].name,stu[i].num,stu[i].chengji);
fflush(fp);
i++;
system( "cls ");
}
fclose(fp);
cout<<" 当前学生表信息:"<<endl;
i=0,n=0;
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fscanf(fp, "%s\t%s\t%f\t",stu[i].name,stu[i].num,&stu[i].chengji);
i++;
n++;
}
fclose(fp);
for(i=0;i<n;i++)
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
}
system("pause");
}
void chazhao()
{
FILE *fp;
int i=0,n=0;
int m,k,j;
system("cls");
cout<<" 请选择查找方式"<<endl;
cout<<" 1.姓名查找 2.学号查找"<<endl;
cout<<" 3.模糊查询 4.返回上级界面"<<endl;
cout<<" 请输入您的查询方式"<<endl;
cin>>k;
if(k!=1&&k!=2&&k!=3&&k!=4)
{
cout<<" 输入错误!"<<endl;
system("pause");
return;
}
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fscanf(fp, "%s\t%s\t%f\t",stu[i].name,stu[i].num,&stu[i].chengji);
i++;n++;
}
if(k==1)
{
cout<<" 请输入查询学生的姓名"<<endl;
char name[10];
cin>>name;
for(i=0;i<n;i++)
{
if(strcmp(name,stu[i].name)==0)
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
break;
}
}
if(i==n)
{
cout<<" 该学生姓名不存在,请重新输入"<<endl;
system("pause");
return;
}
else
{
cout<<" 是否要继续查找?"<<endl;
cout<<" 1.继续查找 2.返回上级界面"<<endl;
cin>>j;
if(j==1)
chazhao();
if(j==2)
return;
}
}
if(k==2)
{
cout<<" 请输入查询学生的学号"<<endl;
char num[20];
cin>>num;
for(i=0;i<n;i++)
{
if(strcmp(num,stu[i].num))
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
break;
}
}
if(i==n)//判断i++完成
{
cout<<" 该学生学号不存在,请重新输入"<<endl;
return;
}
else
{
cout<<" 是否要继续查找?"<<endl;
cout<<" 1.继续查找 2.返回上级界面"<<endl;
cin>>j;
if(j==1)
chazhao();
if(j==2)
denglu();
}
}
if(k==3)
{
char xing[10];
int i,c=0;
system("cls");
cout<<" 请输入想要查找的姓氏"<<endl;
cin>>xing;
for(i=0;i<n;i++)//对于n的取值可能存在问题
{
if(stu[i].name[0]==xing[0]&&stu[i].name[1]==xing[1])
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
c++;
}
}
if(c==0)
{
cout<<" 该学生学号不存在,请重新输入"<<endl;
return;
}
else
{
cout<<" 是否要继续查找?"<<endl;
cout<<" 1.继续查找 2.返回上级界面"<<endl;
cin>>j;
if(j==1)
chazhao();
if(j==2)
denglu();
}
}
if(k==4)
return;
fclose(fp);
system("pause");
}
void xiugai()
{
FILE *fp;
int i=0,n=0;
int m,k,j;
system("cls");
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fscanf(fp, "%s\t%s\t%f\t",stu[i].name,stu[i].num,&stu[i].chengji);
i++;n++;
}
fclose(fp);
//fclose(fp);W+需要在写入后关闭文件
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
cout<<" 请输入修改学生的姓名"<<endl;
char name[10];
cin>>name;
for(i=0;i<n;i++)
{
if(strcmp(name,stu[i].name)==0)
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
cout<<" 请输入新信息(姓名、学号、成绩)"<<endl;
cin>>stu[i].name>>stu[i].num>>stu[i].chengji;
//cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
break;
}
}
if(i==n)
{
cout<<" 该学生姓名不存在,请重新输入"<<endl;
system("pause");
return;
}
else
{
cout<<" 当前信息"<<endl;
for(i=0;i<n;i++)//将新数据写入
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
fprintf(fp,"%s %s %f\n",stu[i].name,stu[i].num,stu[i].chengji);
//fflush(fp);
}
fclose(fp);
cout<<" 修改成功!!!"<<endl;
cout<<" 是否要继续修改信息?"<<endl;
cout<<" 1.继续修改 2.返回上级界面"<<endl;
cin>>j;
if(j==1)
xiugai();
if(j==2)
return;
}
}
void charu()
{
FILE *fp;
int i=0,n=0;
int m,k,j;
system("cls");
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fscanf(fp, "%s\t%s\t%f\t",stu[i].name,stu[i].num,&stu[i].chengji);
n++;
}
fclose(fp);
char num2[20],name2[20];
float chengji2;
cout<<" 请依此输入学生的姓名、学号、成绩"<<endl;
cin>>name2>>num2>>chengji2;
for(i=n-1;i>=0;i--)
{
if(strcmp(stu[i].num,num2)>0)
{
strcpy(stu[i+1].num,stu[i].num);
strcpy(stu[i+1].name,stu[i].name);
stu[i+1].chengji=stu[i].chengji;
}
else{
break;
}
}
strcpy(stu[i+1].num,num2);
strcpy(stu[i+1].name,name2);
stu[i+1].chengji=chengji2;
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
for(i=0;i<n+1;i++)//将新数据写入
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
fprintf(fp,"%s %s %f\n",stu[i].name,stu[i].num,stu[i].chengji);
}
fclose(fp);
system("pause");
}
void shanchu()
{
FILE *fp;
int i=0,n=0;
int m,k,j;
system("cls");
if((fp=fopen(filename,"r"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fscanf(fp, "%s\t%s\t%f\t",stu[i].name,stu[i].num,&stu[i].chengji);
i++;n++;
}
fclose(fp);//W+需要在写入后关闭文件
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannot open the files\n");
system("pause");
return;
}
cout<<" 请输入删除学生的姓名"<<endl;
char name[10];
bool jieguo=false;
cin>>name;
for(i=0;i<n;i++)
{
if(strcmp(name,stu[i].name)==0)
{
cout<<" 查找成功"<<endl;
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
jieguo=true;
break;
}
}
int p;
if(jieguo==false)
{
cout<<" 该学生姓名不存在"<<endl;
for(i=0;i<n-1;i++)//将新数据写入
fprintf(fp,"%s %s %f\n",stu[i].name,stu[i].num,stu[i].chengji);
fclose(fp);
system("pause");
cout<<" 是否要继续删除?"<<endl;
cout<<" 1.继续 2. 返回主界面"<<endl;
cin>>p;
if(p==1)
shanchu();
if(p==2)
return;
}
else
{
cout<<" 是否要删除该信息?"<<endl;
cout<<" 1.删除 2.取消"<<endl;
cin>>j;
if(j==1)
{
for(;i<n-1;i++)
{
stu[i].chengji=stu[i+1].chengji;
strcpy(stu[i].name,stu[i+1].name);
strcpy(stu[i].num,stu[i+1].num);
}
cout<<" 当前信息"<<endl;
for(i=0;i<n-1;i++)//将新数据写入
{
cout<<" "<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].chengji<<endl;
fprintf(fp,"%s %s %f\n",stu[i].name,stu[i].num,stu[i].chengji);
}
fclose(fp);
cout<<" 信息已被删除!!!"<<endl;
system("pause");
}
if(j==2)
{
for(i=0;i<n-1;i++)//将新数据写入
fprintf(fp,"%s %s %f\n",stu[i].name,stu[i].num,stu[i].chengji);
fclose(fp);
return;
}
}
}
int main()
{
int n=0;
menu_filename();
for(;;) //循环使用主界面直到遇到结束命令
{
switch(denglu()) // 函数的调用//
{
case 1:
printf("\t\t *^_^*学生记录添加 *^_^*\n");
jianli();
break;
case 2:
printf("\t\t *^_^*学生信息查询 *^_^*\n");
chazhao();
break;
case 3:
printf("\t\t *^_^*数据修改 *^_^*\n");
xiugai();
break;
case 4:
printf("\t\t *^_^*数据插入 *^_^*\n");
charu();
break;
case 5:
printf("\t\t *^_^*数据删除 *^_^*\n");
shanchu();
break;
case 6:
printf("\n\t\t谢谢使用,再见!\n");
printf("\n\t\t");
system("pause");
exit(6);
}
}
system("pause");
//return 0;
}
学生信息管理系统
最新推荐文章于 2022-07-26 21:45:17 发布