#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include<windows.h>
#define maxstudent 40
typedef struct student
{
int num;
int classid;
int year;
char sex;
char nation[6];
char major[20];
char name[20];
}stu;
int cmpnum(const void *a, const void *b)
{
return ((stu *)a)->num - ((stu *)b)->num;
}
int cmpyear(const void *a, const void *b)
{
return((stu *)a)->year - ((stu *)b)->year;
}
int delete1(int index, int n);
void show();
int delete_num(int num, int n);
void ui_son();
void save(int n);
int loading();
void sortByCode();
void sort_year();
void find_num(int element, int n);
void find_name(char name[], int n);
int odd(int n);
int input();
void ui();
int insert(int index, int n);
void judge_year(int k);
void judge_num(int k);
void judge_sex(int k);
void modify(int element, int length);
void son_operator();
void input_son(int i);
stu s[maxstudent];
int n;
int tag;
int choose;
int numflag = 0;
int yearflag = 0;
int sexflag = 0;
int main()
{
stu s[maxstudent];
int index, element, number;
int select;
char findname[20];
printf("\t\t欢迎进入学生信息系统\n");
printf("\t\t请输入序号进入特定功能\n");
tag = 1;
while (tag == 1)
{
tag = 0;
ui();
while(scanf("%d", &select) == 0)
{
printf("输入错误,请重新输入\n");
fflush(stdin);
}
if (select == 1)
{
n = input();
printf("\t信息已成功录入系统!\n");
son_operator();
}
else if (select == 2)
{
show();
tag = 1;
}
else if (select == 3)
{
sortByCode();
son_operator();
}
else if (select == 4)
{
sort_year();
son_operator();
}
else if (select == 5)
{
printf("\t请输入添加的位置:");
scanf("%d", &index);
n = insert(index, n);
son_operator();
}
else if (select == 6)
{
n = odd(n);
son_operator();
}
else if (select == 7)
{
printf("\t请输入查询的学生号码\n\t");
scanf("%d", &element);
find_num(element, n);
tag = 1;
}
else if (select == 8)
{
printf("\t请输入查询的学生名字\n\t");
scanf("%s", findname);
find_name(findname, n);
tag = 1;
}
else if (select == 9)
{
printf("\t请输入删除的位置:");
scanf("%d", &index);
n = delete1(index, n);
son_operator();
}
else if (select == 10)
{
printf("\t请输入删除的学号:");
scanf("%d", &number);
n = delete_num(number, n);
son_operator();
}
else if (select == 11)
{
printf("请输入要修改的学生的学号");
scanf("%d", &element);
modify(element, n);
son_operator();
}
else if (select == 12)
{
save(n);
printf("\t学生信息保存成功\t");
tag = 1;
}
else if (select == 13)
{
save(n);
printf("\t程序关闭\n");
tag = 1;
return 0;
}
else
{
save(n);
system("cls");
printf("\t输入错误,请重新输入\n");
tag = 1;
}
}
}void show()
{
system("cls");
int i;
printf("\n\n");
printf("\t\t学生的信息为\n");
printf("学生编号 学生学号 班级编号 年龄 性别 姓名 民族 专业课\n");
for (i = 0; i < n; i++)
{
printf("%-10d", i + 1);
printf("%-10d%-10d%-6d%-6c%-6s%-6s%-8s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
}
}
int delete_num(int num, int n)
{
int i, j, flag = 0;
char yn;
for (i = 0; i < n; i++)
{
if (s[i].num == num)
{
j = i;
break;
}
}
if (i >= n)
{
printf("\t无此学号,学生信息删除失败!!\n");
return n;
}
printf("\t是否删除 y表示是 n表示否 :");
getchar();
scanf("%c", &yn);
if (yn == 'y')
{
if (j < n)
{
for (j = i + 1; j < n; j++)
{
s[j - 1] = s[j];
}
n--;
printf("\t学生信息删除成功!!\n");
return n;
}
}
else
{
printf("\t学生信息未删除!!\n");
return n;
}
}
int delete1(int index, int n)
{
int i, flag = 0;
char yn;
if (n == 0)
return 0;
if (index < 1 || index > n)
{
printf("删除的位置错误\n");
printf("删除失败\n");
return 0;
}
printf("\t是否删除 y表示是 n表示否 :");
getchar();
scanf("%c", &yn);
if (yn == 'y')
{
for (i = index; i < n; i++)
s[i - 1] = s[i];
n--;
printf("\t删除成功!!\n");
return n;
}
else
{
printf("\t学生信息未删除!!\n");
return n;
}
}
void save(int n)
{
FILE * out;
if ((out = fopen("student.txt", "w")) == NULL)
{
printf("cannot open this file\n");
exit(0);
}
int i;
for (i = 0; i < n; i++)
{
fprintf(out, "%d %d %d %c %s %s %s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
}
fclose(out);
}
int loading()
{
int i = 0;
FILE *in;
if ((in = fopen("student.txt", "r")) == NULL)
{
printf("cannot open this file\n");
exit(0);
}
else
{
n = 0;
while (fscanf(in, "%d %d %d %c %s %s %s", &s[i].num, &s[i].classid, &s[i].year, &s[i].sex, s[i].name, s[i].nation, s[i].major) == 7)
{
i++;
n++;
}
}
fclose(in);
return i;
}
void sortByCode()
{
qsort(s, n, sizeof(stu), cmpnum);
printf("\t学生按学号排序成功!\n");
return;
}
void sort_year()
{
qsort(s, n, sizeof(stu), cmpyear);
printf("\t学生按年龄排序成功!\n");
return;
}
void find_num(int element, int n)
{
int i;
int flag = 0;
for (i = 0; i < n; i++)
{
if (s[i].num == element)
{
flag = 1;
break;
}
}
if (flag)
{
printf("\t找到了这个学生\n");
printf("学生编号 学生学号 班级编号 年龄 性别 姓名 民族 专业课\n");
printf("%-10d", i + 1);
printf("%-10d%-10d%-6d%-6c%-6s%-6s%-8s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
return;
}
if (i >= n)
{
printf("\t没找到\n");
return;
}
}
void find_name(char name[], int n)
{
int i, flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(s[i].name, name) == 0)
{
flag = 1;
printf("\t找到了这个学生\n");
printf("学生编号 学生学号 班级编号 年龄 性别 姓名 民族 专业课\n");
printf("%-10d", i + 1);
printf("%-10d%-10d%-6d%-6c%-6s%-6s%-8s\n", s[i].num, s[i].classid, s[i].year, s[i].sex, s[i].name, s[i].nation, s[i].major);
}
}
if (flag == 0)
{
printf("\t没找到!!\n");
}
return;
}
int odd(int n)
{
int i, flag;
int k = n + 1;
if (k > maxstudent)
{
printf("\t学生人数超出上限!!\n");
return 0;
}
input_son(n);
n++;
printf("\t学生信息添加成功\n");
return n;
}
int insert(int index, int n)
{
int i, digit = 0, num;
stu m;
int k = n + 1;
if (k > maxstudent)
{
printf("\t学生人数超出上限插入失败!!\n");
return 0;
}
if (index < 1 || index > n)
{
printf("\t插入的位置错误\n");
printf("\t插入失败!!\n");
return 0;
}
do
{
digit = 0;
numflag = 0;
printf("\t请输入学生学号:");
scanf("%d", &m.num);
num = m.num;
while (num)
{
digit++;
num /= 10;
}
for (i = 0; i < n; i++)
{
if (m.num == s[i].num)
{
numflag = 1;
break;
}
}
if (digit != 4 || i < n)
{
printf("\t学号输入错误!!\n");
numflag = 1;
}
} while (numflag == 1);
printf("\t输入成功!\n");
printf("\t请输入学生班级编号:");
scanf("%d", &m.classid);
printf("\t输入成功!\n");
do
{
yearflag = 0;
printf("\t请输入学生年龄:");
scanf("%d", &m.year);
if (m.year < 15 || m.year > 25)
{
printf("\t年龄输入错误!!\n");
yearflag = 1;
}
} while (yearflag == 1);
printf("\t输入成功!\n");
do
{
printf("\t请输入学生性别:");
getchar();
scanf("%c", &m.sex);
if (m.sex != 'f' && m.sex != 'm')
{
printf("\t性别输入错误!!\n");
sexflag = 1;
}
} while (sexflag == 1);
printf("\t输入成功!\n");
printf("\t请输入学生名字:");
scanf("%s", m.name);
printf("\t输入成功!\n");
printf("\t请输入学生民族:");
scanf("%s", m.nation);
printf("\t输入成功!\n");
printf("\t请输入学生专业课:");
scanf("%s", m.major);
printf("\t输入成功!\n");
printf("\t学生信息插入成功\n");
for (i = n - 1; i >= index - 1; i--)
{
s[i + 1] = s[i];
}
s[index - 1] = m;
n++;
return n;
}
int input()
{
int i, flag = 0, j;
printf("\t请输入学生总人数:");
scanf("%d", &n);
if (n > maxstudent)
{
printf("\t学生人数超出上限 失败!!\n");
return 0;
}
for (i = 0; i < n; i++)
{
input_son(i);
}
return n;
}
void modify(int element, int length)
{
int i, j, flag = 0;
for (j = 0; j < length; j++)
{
if (element == s[j].num)
{
i = j;
flag = 1;
break;
}
}
if (flag)
{
printf("\t请输入学生班级编号:");
scanf("%d", &s[i].classid);
printf("\t输入成功!\n");
do
{
printf("\t请输入学生年龄:");
scanf("%d", &s[i].year);
judge_year(i);
} while (yearflag == 1);
printf("\t输入成功!\n");
do
{
printf("\t请输入学生性别:");
getchar();
scanf("%c", &s[i].sex);
judge_sex(i);
} while (sexflag == 1);
printf("\t输入成功!\n");
printf("\t请输入学生名字:");
scanf("%s", s[i].name);
printf("\t输入成功!\n");
printf("\t请输入学生民族:");
scanf("%s", s[i].nation);
printf("\t输入成功!\n");
printf("\t请输入学生专业课:");
scanf("%s", s[i].major);
printf("\t输入成功!\n");
}
else
{
printf("\t没找到这个学号!!\n修改失败!!\n");
}
}
void ui()
{
printf("\n\n");
printf("\t\t1.初始化学生信息\n");
printf("\t\t2.显示学生信息\n");
printf("\t\t3.按学号进行排序\n");
printf("\t\t4.按年龄进行排序\n");
printf("\t\t5.插入学生信息\n");
printf("\t\t6.直接向后添加学生信息\n");
printf("\t\t7.按学号查找学生信息\n");
printf("\t\t8.按姓名查找学生信息\n");
printf("\t\t9.按位置删除学生信息\n");
printf("\t\t10.按学号删除学生信息\n");
printf("\t\t11.按学号修改学生信息\n");
printf("\t\t12.保存学生信息\n");
printf("\t\t13.退出程序\n");
printf("\t请输入:");
}
void ui_son()
{
printf("\t\t1.显示当前学生信息\n");
printf("\t\t2.返回主菜单\n");
printf("\t\t3.退出系统\n");
}
void son_operator()
{
ui_son();
printf("\t");
scanf("%d", &choose);
if (choose == 1)
{
show();
tag = 1;
return;
}
else if (choose == 2)
{
tag = 1;
}
else if (choose == 3)
return;
}
void judge_num(int k)
{
numflag = 0;
int j;
int digit = 0;
int num = s[k].num;
while (s[k].num)
{
digit++;
s[k].num /= 10;
}
s[k].num = num;
for (j = k - 1; j >= 0; j--)
{
if (num == s[j].num || digit != 4)
{
printf("\t输入的学号有误!!\n");
numflag = 1;
break;
}
}
if (k == 0)
{
if (digit != 4)
{
printf("\t输入的学号有误!!\n");
numflag = 1;
}
}
return;
}
void judge_year(int k)
{
yearflag = 0;
if (s[k].year < 15 || s[k].year > 25)
{
printf("\t年龄输入错误!!\n");
yearflag = 1;
}
return;
}
void judge_sex(int k)
{
sexflag = 0;
if (s[k].sex != 'm' && s[k].sex != 'f')
{
sexflag = 1;
printf("\t性别输入错误!!\n");
}
}
void input_son(int i)
{
do
{
printf("\t请输入学生学号:");
scanf("%d", &s[i].num);
judge_num(i);
} while (numflag == 1);
printf("\t输入成功!\n");
printf("\t请输入学生班级编号:");
scanf("%d", &s[i].classid);
printf("\t输入成功!\n");
do
{
printf("\t请输入学生年龄:");
scanf("%d", &s[i].year);
judge_year(i);
} while (yearflag == 1);
printf("\t输入成功!\n");
do
{
printf("\t请输入学生性别:");
getchar();
scanf("%c", &s[i].sex);
judge_sex(i);
} while (sexflag == 1);
printf("\t输入成功!\n");
printf("\t请输入学生名字:");
scanf("%s", s[i].name);
printf("\t输入成功!\n");
printf("\t请输入学生民族:");
scanf("%s", s[i].nation);
printf("\t输入成功!\n");
printf("\t请输入学生专业课:");
scanf("%s", s[i].major);
printf("\t输入成功!\n");
system("cls");
}