1、问题描述
学生信息包括:学号、姓名、性别、年龄、班级等信息。小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。中学生除了包括小学生所有信息外,还包括地理、历史成绩、家庭住址等信息。大学生除了包括学生所有信息外,还包括专业、家庭地址、联系方式等信息。
2、功能要求
管理员用户名:admin
管理员密码:123456(输入时以密文形式,如:******)
管理员:
(1)添加普通用户用户名和密码信息。
(2)重置普通用户初始密码。(如:1)
(3)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(4)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(5)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。
(6)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(7)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(8)统计功能:能根据多种参数进行统计。能统计学生人数、按性别统计、按年龄统计等。
(9)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(10)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
普通用户:
(1)修改个人账户密码。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<windows.h>
#include<conio.h>
char a0[26]={"admin"};//管理员名称
char b0[26]={"123456"};//管理员登录密码
char xb[26];//用户名
struct Student_zhanghu//普通用户的账户信息 (OK)
{
char aa[50];//普通用户名
char bb[50];//密码
struct Student_zhanghu *next;//指向下一个用户
};
struct Student_xinxi//学生信息 (OK)
{
char xuehao[26];//学号
char xingming[26];//姓名
char xingbie[26];//性别
int age;//年龄
int banji;//班级
int english;//英语成绩
int math;//数学成绩
int chinese;//语文成绩
int geagraphy;//地理成绩
int history;//历史成绩
char address[50];//家庭地址
char zhuanye[50];//专业
char phone[26];//联系方式
int phone0;//标记是否为大学生,因为只有大学生输入手机号
struct Student_xinxi *next;//指向下一个学生信息
};
void chuangjianyonghu()//创建用户 (OK)(1)
{
FILE *p0;
char b;
int i=0;
struct Student_zhanghu p;
p0=fopen("账户信息.txt","a");
printf("请输入用户名:\n");
scanf("%s",&p.aa);
printf("请输入密码:\n");
while(b!=13)
{
b=getch();
if(b!=13)
{
putchar('*');
p.bb[i]=b;
i++;
}
}
fwrite(&p,sizeof(struct Student_zhanghu),1,p0);
printf("\n");
printf("%s用户创建成功\n",p.aa);
rewind(p0);
fclose(p0);
}
void xueshengxinxishuru()//学生信息输入 (OK)
{
FILE *p0,*p1;
p1=fopen("学生信息.txt","r");
struct Student_xinxi hf,p;
int a,i;
scanf("%d",&a);
if(a==1)//小学生信息
{
printf("请输入学号:\n");
scanf("%s",&p.xuehao);
while(fread(&hf,sizeof(struct Student_xinxi),1,p1)==1)//判断学号是否重复
{
if(strcmp(hf.xuehao,p.xuehao)==0)
{
printf("警告:数据添加重复!\n");
printf("请重新输入学号:\n");
scanf("%s",&p.xuehao);
rewind(p1);
}
}
rewind(p1);
fclose(p1);
printf("请输入姓名:\n");
scanf("%s",&p.xingming);
printf("请输入性别:\n");
scanf("%s",&p.xingbie);
printf("请输入年龄:\n");
scanf("%d",&p.age);
printf("请输入班级:\n");
scanf("%d",&p.banji);
printf("请输入英语成绩:\n");
scanf("%d",&p.english);
printf("请输入数学成绩:\n");
scanf("%d",&p.math);
printf("请输入语文成绩:\n");
scanf("%d",&p.chinese);
p.history=0;
p.geagraphy=0;
p.phone0=0;
}
if(a==2)//中学生信息
{
printf("请输入学号:\n");
scanf("%s",&p.xuehao);
while(fread(&hf,sizeof(struct Student_xinxi),1,p1)==1)//判断学号是否重复
{
if(strcmp(hf.xuehao,p.xuehao)==0)
{
printf("警告:数据添加重复!\n");
printf("请重新输入学号:\n");
scanf("%s",&p.xuehao);
rewind(p1);
}
}
rewind(p1);
fclose(p1);
printf("请输入姓名:\n");
scanf("%s",&p.xingming);
printf("请输入性别:\n");
scanf("%s",&p.xingbie);
printf("请输入年龄:\n");
scanf("%d",&p.age);
printf("请输入班级:\n");
scanf("%d",&p.banji);
printf("请输入英语成绩:\n");
scanf("%d",&p.english);
printf("请输入数学成绩:\n");
scanf("%d",&p.math);
printf("请输入语文成绩:\n");
scanf("%d",&p.chinese);
printf("请输入地理成绩:\n");
scanf("%d",&p.geagraphy);
printf("请输入历史成绩:\n");
scanf("%d",&p.history);
printf("请输入家庭地址:\n");
scanf("%s",&p.address);
p.phone0=0;
}
if(a==3)//大学生信息
{
printf("请输入学号:\n");
scanf("%s",&p.xuehao);
while(fread(&hf,sizeof(struct Student_xinxi),1,p1)==1)//判断学号是否重复
{
if(strcmp(hf.xuehao,p.xuehao)==0)
{
printf("警告:数据添加重复!\n");
printf("请重新输入学号:\n");
scanf("%s",&p.xuehao);
rewind(p1);
}
}
rewind(p1);
fclose(p1);
printf("请输入姓名:\n");
scanf("%s",&p.xingming);
printf("请输入性别:\n");
scanf("%s",&p.xingbie);
printf("请输入年龄:\n");
scanf("%d",&p.age);
printf("请输入班级:\n");
scanf("%d",&p.banji);
printf("请输入专业名称:\n");
scanf("%s",&p.zhuanye);
printf("请输入家庭地址:\n");
scanf("%s",&p.address);
printf("请输入联系方式:\n");
scanf("%s",&p.phone);
p.phone0=1;
p.geagraphy=0;
p.history=0;
p.math=0;
p.english=0;
p.chinese=0;
}
p0=fopen("学生信息.txt","a");
fwrite(&p,sizeof(struct Student_xinxi),1,p0);
rewind(p0);
fclose(p0);
system("cls");//清屏函数
printf("%s信息录入成功!\n",p.xingming);
printf("欢迎您,尊敬的管理员%s\n",a0);
printf("0:退出管理员账户\n");
printf("1:创建新的普通用户\n");
printf("2:重置普通用户初始密码\n");
printf("3:用户信息查询\n");
printf("4:显示所有学生记录\n");
printf("5:学生记录编辑\n");
printf("6:学生记录删除\n");
printf("7:学生信息统计\n");
}
void chongzhi()//重置用户函数 (OK)(2)
{
char name[50],bb[50]={"000000"};
scanf("%s",&name);
FILE *p,*pr;
p=fopen("账户信息.txt",&