#include<stdio.h>
#include<stdlib.h> //标准库头文件
#include<string.h>
#include<Windows.h> //一个重要头文件,其中又包括了许多其他头文件
int n=7;//学生总人数,n判断数据有几组
int k=1,f;
/*定义一个结构体*/
struct student
{
char no[10]; //学号
char n[10]; //姓名
int age; //年龄
char sex[5]; //性别
char year[10]; //出生年月
char ad[10]; //地址
char phone[10]; //电话
char mail[10]; //邮箱
}i[20];
struct mima
{
char a[10];
char b[10];
}m[20];
//显示当前信息
void display()
{
int j=0;
FILE*fp;
fp=fopen("d:\\student.txt","r");
if(fp==NULL)
printf("输出错误");
while(fscanf(fp,"%s %s %d %s %s %s %s %s",i[j].no,i[j].n,&i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail)==8)
{
j++;
}
n=j;
printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 邮箱 \n");
printf("--------------------------------------------------------------------\n");
for(j=0;j<n;j++)
printf("%s %s %d %s %s %s %s %s\n",i[j].no,i[j].n,i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail);
}
//刷新信息
void update()
{
int j=0;
FILE*fp;
fp=fopen("d:\\student.txt","r");
if(fp==NULL)
printf("输出错误");
while(fscanf(fp,"%s %s %d %s %s %s %s %s",i[j].no,i[j].n,&i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail)==8)
{
j++;
}
n=j; //n判断数据有几组
printf("******************刷新成功************************************\n");
fclose(fp);
}
//保存信息
void fileWrite()
{
FILE*fp;
int j;
fp=fopen("d://student.txt","w");
if(fp==NULL)
printf("文件打开错误\n");
for(j=0;j<n;j++)
{
fprintf(fp,"%s %s %d %s %s %s %s %s\n",i[j].no,i[j].n,i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail);
}
fclose(fp);
printf("***********************保存成功******************************\n");
}
//帮助系统
void help()
{
printf("\n0.欢迎使用系统帮助!\n");
printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
printf("\n2.按照菜单提示键入数字代号;\n");
printf("\n3.增加学生信息后,切记保存;\n");
printf("\n4.谢谢您的使用!\n");
}
//查询学生信息
void seek()
{
int j=0,k=0;
int x=1; //判断是否存在查询的学生,不存在时x=0,然后输出不存在。
int choice;
char s[10];
FILE*fp;
fp=fopen("d:\\student.txt","r");
if(fp==NULL)
printf("输出错误");
while(fscanf(fp,"%s %s %d %s %s %s %s %s",i[j].no,i[j].n,&i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail)==8)
{
j++;
}
n=j; //用n判断有几组数据,for循环时控制循环次数。
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("-------------------------1.按学号查询-----------------------\n");
printf("-------------------------2.按姓名查询-----------------------\n");
printf("-------------------------3.退出本菜单-----------------------\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
while(x){
printf(" * * * * * * * * * *请输入查询方式前的序号* * * * * * * * * *\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
{
printf(" * * * * * * * * * *请输入您要查询的学号 * * * * * * * * * *\n");
scanf("%s",s);
for(j=0;j<n;j++)
if(strcmp(s,i[j].no)==0)
{
k=1;
printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 邮箱 \n");
printf("--------------------------------------------------------------------\n");
printf("%s %s %d %s %s %s %s %s\n",i[j].no,i[j].n,i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail);
break;
}
if(k==0)
{
printf("---------------------该学生不存在------------------------\n");
break;
}
} break;
case 2:
{
printf(" * * * * * * * * * *请输入您要查询的姓名 * * * * * * * * * *\n");
scanf("%s",s);
for(j=0;j<n;j++)
if(strcmp(s,i[j].n)==0)
{
k=1;
printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 邮箱 \n");
printf("--------------------------------------------------------------------\n");
printf("%s %s %d %s %s %s %s %s\n",i[j].no,i[j].n,i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail);
break;
}
if(k==0)
{
printf("---------------------该学生不存在------------------------\n");
break;
}
break;
}
case 3:
x=0;break;
default:
printf(" * * * * * * * * * *请输入正确序号1 2 3 * * * * * * * * * *\n");
break;
}
}
}
//修改学生信息
void modify()
{
int j=0,a,x=1,k=-1; //k的作用是判断输入的学号是否存在。
FILE*fp;
fp=fopen("d:\\student.txt","r");
if(fp==NULL)
{
printf("文件打开错误\n");
system("pause"); //防止生成exe界面时闪一下,使程序暂停
exit(0); //表示程序非正常退出。
}
while(fscanf(fp,"%s %s %d %s %s %s %s %s",i[j].no,i[j].n,&i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail)==8)
{
j++;
n=j; //用n判断有几组数据,for循环时控制循环次数。
}
char no1[10]; //学号
char name[10]; //姓名
int age1; //年龄
char sex1[5]; //性别
char year1[10]; //出生年月
char ad1[10]; //地址
char phone1[10]; //电话
char mail1[10]; //邮箱
printf(" * * * * * * * * * *请输入您要修改信息的学号 * * * * * * * * * *\n");
scanf("%s",no1);
for(j=0;j<n;j++)
{
if(strcmp(no1,i[j].no)==0)
k=j;
}
printf("---------------------------------------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改电话\n");
printf("7.修改邮箱\n");
printf("8.退出\n");
printf("-------------------------------------------------\n");
while(x){
printf("请输入编号修改:");
scanf("%d",&a);
switch(a)
{
case 1:
printf("请输入新的姓名:");
scanf("%s",name);
strcpy(i[k].n,name);
fileWrite(); //用函数保存(保存函数)
break;
case 2:
printf("请输入新的年龄:");
scanf("%d",&age1);
i[k].age=age1;
fileWrite(); //用函数保存(保存函数)
break;
case 3:
printf("请输入新的性别:");
scanf("%s",sex1);
strcpy(i[k].sex,sex1);
fileWrite();
break;
case 4:
printf("请输入新的出生年月:");
scanf("%s",year1);
strcpy(i[k].year,year1);
fileWrite(); //用函数保存(保存函数)
break;
case 5:
printf("请输入新的地址:");
scanf("%s",ad1);
strcpy(i[k].ad,ad1);
fileWrite();
break;
case 6:
printf("请输入新的电话:");
scanf("%s",phone1);
strcpy(i[k].phone,phone1);
fileWrite(); //用函数保存(保存函数)
break;
case 7:
printf("请输入新的邮箱:");
scanf("%s",mail1);
strcpy(i[k].mail,mail1);
fileWrite(); //用函数保存(保存函数)
break;
case 8: x=0; break;
default:
printf("请输入正确的序号\n");
}
}
if(k==-1)
{
printf("学号输入错误\n");
}
}
// 新增学生信息
void insert()
{
FILE*fp;
fp=fopen("d://student.txt","a");
if(fp==NULL)
printf("文件打开错误\n");
printf("请输入第%d个学生的学号:",n+1);
scanf("%s",i[n+1].no);
printf("\n请输入第%d个学生的姓名:",n+1);
scanf("%s",i[n+1].n);
printf("\n请输入第%d 个学生的性别:",n+1);
scanf("%s",i[n+1].sex);
printf("\n请输入第%d 个学生的年龄:",n+1);
scanf("%d",&i[n+1].age);
printf("\n请输入第%d 个学生的出生日期:",n+1);
scanf("%s",i[n+1].year);
printf("\n请输入第%d 个学生的地址:",n+1);
scanf("%s",i[n+1].ad);
printf("\n请输入第%d 个学生的电话:",n+1);
scanf("%s",i[n+1].phone);
printf("\n请输入第%d个学生的邮箱:",n+1);
scanf("%s",i[n+1].mail);
fprintf(fp,"%s %s %d %s %s %s %s %s\n",i[n+1].no,i[n+1].n,i[n+1].age,i[n+1].sex,i[n+1].year,i[n+1].ad,i[n+1].phone,i[n+1].mail); //保存数据
fclose(fp);
printf("------------------------添加成功-----------------------------\n");
n=n+1; //随时改变n的值
}
// 删除函数;
void dele()
{
int j=0;int x=0; //x来判断是否有该学号。
FILE*fp;
fp=fopen("d://student.txt","r");
if(fp==NULL)printf("打开文件失败");
while(fscanf(fp,"%s %s %d %s %s %s %s %s",i[j].no,i[j].n,&i[j].age,i[j].sex,i[j].year,i[j].ad,i[j].phone,i[j].mail)==8)
{
j++;
}
n=j; //用n判断有几组数据,for循环时控制循环次数。
char s[10];
printf("请输入要删除的学号");
scanf("%s",s);
for(j=0;j<n;j++)
if(strcmp(s,i[j].no)==0)
{
for(f=j;f<n-1;f++) //删除后面的每一组数据往前靠一个
{
i[f]=i[f+1];
}
x=1;
}
if(x==0) printf("学号不存在");
if(x==1)
{
n=n-1;
printf("------------------------删除成功-----------------------------\n");
fileWrite();
}
}
//界面
void menu()
{
int num;
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" *| 学生信息管理系统 |*\n");
printf(" *| |*\n");
printf(" *| * * * * * * *系统功能菜单* * * * * * * |*\n");
printf(" *| -------------------------------------------- |*\n");
printf(" *| |*\n");
printf(" *| 0.系统帮助及说明 | 1.刷新学生信息 |*\n");
printf(" *| |*\n");
printf(" *| 2.查询学生信息 | 3.修改学生信息 |*\n");
printf(" *| |*\n");
printf(" *| 4.增加学生信息 | 5.按学号删除信息 |*\n");
printf(" *| |*\n");
printf(" *| 6.显示当前信息 | 7.保存当前学生信息 |*\n");
printf(" *| |*\n");
printf(" *| 8.退出系统 |*\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("------------------------------------------------------------\n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num) {
case 0:
help();
break;
case 1:
update();
break;
case 2:
seek();
break;
case 3:
modify();
break;
case 4:
insert();
break;
case 5:
dele();
break;
case 6:
display();
break;
case 7:
fileWrite();
break;
case 8:
k=0;
break;
default:
printf("请在0-9之间选择\n");
}
}
void sign()
{
int j=0,g;
FILE*f;
f=fopen("d:\\mima.txt","r");
while(fscanf(f,"%s %s",m[j].a,m[j].b)==2)
{
j++;
g=j;
}
fclose(f);
system("color 8B"); //未登录之前系统为灰色。
printf("|——————————————————————————————————————|\n");
printf("|——————————————————————————————————————|\n");
printf("| ◇◇□☆★ 欢迎进入信息管理系统 ★☆□◇◇ |\n");
printf("|——————————————————————————————————————|\n");
printf("| 1-用户进入 |\n");
printf("|——————————————————————————————————————|\n");
printf("| 2-申请账号 |\n");
printf("|——————————————————————————————————————|\n");
printf("| 3-退出系统 |\n");
printf("|——————————————————————————————————————|\n");
printf("|——————————————————————————————————————|\n");
printf("请输入您的选择\n");
int c;
scanf("%d",&c);
if(c==1){
f=fopen("d:\\mima.txt","r");
while(fscanf(f,"%s %s",m[j].a,m[j].b)==2)
{
j++;
g=j;
}
char a1[9];
char b1[9];
printf("请输入账号密码登录后查看\n");
printf("账号:");
scanf("%s",a1);
printf("密码:");
scanf("%s",b1);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
for(j=0;j<g;j++)
{
if(strcmp(m[j].a,a1)==0&&strcmp(m[j].b,b1)==0)
{
system("color 07"); //成功后系统恢复原来的颜色
system("cls");
fclose(f);
menu();
break;
}
}
if(j==g) //登录不成功退出系统。
{
printf("账号密码错误\n");
system("cls");
fclose(f);
sign();
}
}
if(c==2)
{
f=fopen("d:\\mima.txt","a");
while(fscanf(f,"%s %s",m[j].a,m[j].b)==2)
{
j++;
g=j;
}
printf("请输入您要申请的账号:");
scanf("%s",m[g+1].a);
printf("请设置您的密码");
scanf("%s",m[g+1].b);
printf("申请成功!");
fprintf(f,"%s %s",m[g+1].a,m[g+1].b );
g=g+1;
fclose(f);
sign();
}
if(c==3)
{
system("cls");//清空上一级所有
printf("您已经成功退出系统,感谢您使用本系统,再见!\n");
k=0;
}
}
int main()
{
system("title 学生信息管理系统"); //修改小黑框的名字
sign();
while(k) //弹出时用k=0;
{
menu();
}
return 0;
}
转载:https://blog.csdn.net/weixin_46106870/article/details/104641910
查看评论