#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int len = 1;
//结构体定义
struct Student
{
char name[10];
char sex;
int id;
int age;
}student[500];
//判断id是否存在
int id_ser(int id){
for(int i = 1; i <= len; i++){
if(student[i].id == id){
return 0;
}
}
return 1;
}
//更新student.txt文件
void updat_file(){
system("rm student.txt");//先删除文件
system("touch student.txt");//再创建文件,用于文件的刷新
system("clear");
FILE *fp;
fp = fopen("./student.txt","w");
if(!fp){
perror("");
}
for(int i = 1; i < len; i++){
fprintf(fp, "姓名:%s ID:%d 性别:%c 年龄:%d\n", student[i].name, student[i].id, student[i].sex, student[i].age);
}
fclose(fp);
printf("创建文件成功!\n");
sleep(2);
system("clear");
}
//添加学生信息
void add_stu(){
int id;
system("clear");
printf("请输入要添加的学生姓名:");
scanf("%s", student[len].name);
while(1){
printf("请输入要添加的学生id:");
scanf("%d", &id);
if(id_ser(id)){
break;
}
}//由于信息是先存储在做比较,不能直接给student[len].id赋值
student[len].id = id;
getchar();//用于获取终端数据后的回车
printf("请输入要添加的学生性别b/g:");
while(1){
scanf("%c", &student[len].sex);
getchar();
if(student[len].sex == 'b' || student[len].sex == 'g'){
break;
}else{
printf("只能输入b/g\n");
}
}
printf("请输入要添加的学生年龄:");
scanf("%d", &student[len].age);
len++;
system("clear");
printf("\n");
printf("信息录入成功\n");
printf("1.继续/2.返回主菜单\n");
int choose;
scanf("%d",&choose);
if(choose == 1){
add_stu();
}
system("clear");
}
//查询学生信息
void ser_stu(){
system("clear");
printf("请输入年想查找的姓名:");
char name[10];
int i, flat = 0;
scanf("%s", name);
for(i = 1; i <= len; i++){
if(!strcmp(student[i].name, name)){
printf("姓名:%s,学号:%d,性别:%c,年龄:%d\n",student[i].name,student[i].id,student[i].sex,student[i].age);
break;
}
}
sleep(4);
system("clear");
printf("1.继续/2.返回主菜单:\n");
int choose;
scanf("%d",&choose);
if(choose == 1){
ser_stu();
}
system("clear");
}
//删除学生信息
void del_stu(){
system("clear");
printf("请输入年想删除的姓名:");
char del_name[10];
int i, flat = 0;
scanf("%s", del_name);
for(i = 1; i <= len; i++){
if(!strcmp(student[i].name, del_name)){
flat = 1;
break;
}
}
for(int j = i; j<=len; j++){
student[j] = student[j+1];
}
system("clear");
if(flat = 1){
len--;
printf("删除成功\n");
}else{
printf("删除失败\n");
}
sleep(3);
system("clear");
printf("1.继续/2.返回主菜单:\n");
int choose;
scanf("%d",&choose);
if(choose == 1){
del_stu();
}
system("clear");
}
//更改学生信息
void upd_stu(){
int i,flag = 0;
char name[10],sex;
system("clear");
printf("请输入要修改的学生姓名:");
scanf("%s", name);
for(i = 1; i <= len; i++){
if(!strcmp(student[i].name, name)){
flag = 1;
break;
}
}
if(flag == 0){
printf("该学生不在名单内\n");
exit(0);
}
system("clear");
printf("1.修改学生id\n");
printf("2.修改学生性别\n");
printf("3.修改学生age\n");
printf("4.修改学生姓名\n");
int ch,id;
scanf("%d", &ch);
switch(ch){
case 1 :
while(1){
printf("请输入要添加的学生id:");
scanf("%d", &id);
getchar();
if(id_ser(id)){
break;
}
}
student[i].id = id;
break;
case 2 :
getchar();//用于获取终端数据后的回车
printf("请输入要修改的学生性别b/g:");
while(1){
scanf("%c", &student[i].sex);
if(sex == 'b' || sex == 'g'){
break;
}else{
printf("只能输入b/g\n");
}
}
break;
case 3 :
printf("请输入要修改的学生年龄:");
scanf("%d", &student[i].age);
break;
case 4 :
printf("请输入要修改的学生姓名:");
scanf("%s", student[i].name);
break;
default: printf("请重新输入:");
break;
}
system("clear");
if(flag = 0){
printf("修改失败\n");
}else{
printf("修改成功\n");
}
sleep(3);
system("clear");
printf("1.继续/2.返回主菜单:\n");
int choose;
scanf("%d",&choose);
if(choose == 1){
upd_stu();
}
system("clear");
}
//主界面
void window(){
system("clear");
printf("****************************\n");
printf(" 欢迎使用学生管理系统 \n");
printf("****************************\n");
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");
printf("****************************\n");
printf("\n");
printf("请输入想要的服务:");
}
//打印学生信息
void print_stu(){
system("clear");
for(int i = 1; i < len; i++){
printf("姓名:%s,学号:%d,性别:%c,年龄:%d\n",student[i].name,student[i].id,student[i].sex,student[i].age);
}
printf("1.继续/2.返回主菜单:\n");
int choose;
scanf("%d",&choose);
if(choose == 1){
print_stu();
}
system("clear");
}
//计算学生人数信息
void num_stu(){
system("clear");
printf("1.总学生人数\n");
printf("2.男学生人数\n");
printf("3.女学生人数\n");
int num,len_b = 0,len_g = 0;
scanf("%d", &num);
printf("\n\n\n");
switch(num){
case 1: printf("总学生人数:%d\n", len-1);break;
case 2:
for (int i = 1; i <= len; ++i)
{
if(student[i].sex == 'b')
len_b++;
}
printf("男学生人数:%d\n", len_b);
break;
case 3:
for (int i = 1; i <= len; ++i)
{
if(student[i].sex == 'g')
len_g++;
}
printf("女学生人数:%d\n", len_b);
break;
default:
printf("输入错误\n");
break;
}
sleep(3);
system("clear");
printf("1.继续/2.返回主菜单:\n");
int choose;
scanf("%d",&choose);
if(choose == 1){
num_stu();
}
system("clear");
}
int main(int argc, char const *argv[])
{
while(1){
window();
int num;
scanf("%d", &num);
switch(num){
case 1: add_stu(); break;
case 2: ser_stu(); break;
case 3: upd_stu(); break;
case 4: del_stu(); break;
case 5: print_stu(); break;
case 6: num_stu(); break;
case 7: updat_file();break;
case 8: exit(0);break;
default :
system("clear");
printf("请重新输入\n");
break;
}
}
return 0;
}