#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
char name[20];
char sex;
int age;
};
#include "exe2.h"
typedef struct student Stu;
int Index = 0;
extern void DeletInfo(Stu *s[]);
int CheckOut(Stu *s[], int n)
{
int flag = 0;
if(s[n] -> sex - 'm' != 0 || s[n] -> sex - 'f' != 0)
{
flag = 1;
printf("请重新录入,女为f男为m!\n");
}
if(s[n] -> age > 50 || s[n] -> age < 1)
{
flag = 1;
printf("请输入正确的年龄\n");
}
return flag;
}
int CompareName(char *name1, char *name2)
{
int min, i, max;
int flag = 0;
int length1 = strlen(name1);
int length2 = strlen(name2);
if(length1 > length2)
{
min = length1;
max = length2;
}else
{
min = length2;
max = length1;
}
if(0 == length1)
{
return 2;
}
if(0 == length2)
{
return 1;
}
for(i = 0; i < min; ++i)
{
if(*name1 - *name2 > 0)
{
flag = 1;
break;
}else if(*name1 - *name2 < 0)
{
flag = 2;
break;
}
name1++;
name2++;
}
if(i == min - 1 && max ==length1 && flag == 0)
{
return 1;
}
return flag;
}
int CheckInfo(char name[])
{
int i;
int len = strlen(name);
int flag = 0;
for(i = 0; i < 8; ++i)
{
if(name[i] - ' ' != 0)
{
flag = 1;
}
}
if(0 == flag || len > 8)
{
return 1;
}else
{
return 0;
}
}
void Welcome()
{
printf("\t\t***************************\n");
printf("\t\t*******Welcome Baby!*******\n");
printf("\t\t***************************\n");
sleep(2);
}
int Menu()
{
int choice;
printf("\t\t1、插入信息 2、查询信息\n");
printf("\t\t3、修改信息 4、删除学生\n");
printf("\t\t5、显示所有 6、退出系统\n");
scanf("%d", &choice);
return choice;
}
void InsertInfo(Stu *s[])
{
int i = 0;
int flag = 0;
int check;
char name[20];
system("clear");
for(i = 0; i < Index; ++i)
{
if(strcmp(s[i] -> name, " ") == 0)
{
flag = 1;
printf("1....");
printf("请输入姓名\n");
scanf("%s", name);
strcpy(s[i] -> name, name);
getchar();
check = CheckInfo(s[i] -> name);
if(1 == check)
{
printf("输入不合法姓名");
memset(s[i] -> name, 0, 20);
return;
}
for(i = 0; i < Index; ++i)
{ printf("%s\n", s[i] -> name);
if(strcmp(name, s[i] -> name) == 0)
{
printf("已经存在这名学生\n");
return;
}
}
printf("请输入性别\n");
scanf("%c", &s[i] -> sex);
getchar();
printf("请输入年龄\n");
scanf("%d", &s[i] -> age);
getchar();
if(CheckOut(s, i) == 1)
{
memset(s[i] -> name, 0, 8);
s[i] -> sex = ' ';
s[i] -> age = 0;
return ;
}
}
}
if(flag != 1)
{
printf("2....");
s[Index] = (Stu *)malloc(sizeof(Stu));
if(NULL == s[Index])
{
printf("NULL ERROR");
exit(1);
}
printf("请输入姓名\n");
scanf("%s", s[Index] -> name);
getchar();
check = CheckInfo(s[Index] -> name);
if(1 == check)
{
printf("输入不合法姓名");
memset(s[Index] -> name, 0, 20);
return;
}
for(i = 0; i < Index; ++i)
{
if(strcmp(s[Index] -> name, s[i] -> name) == 0)
{
printf("已经存在这名学生\n");
return;
}
}
printf("请输入性别\n");
scanf("%c", &s[Index] -> sex);
getchar();
printf("请输入年龄\n");
scanf("%d", &s[Index] -> age);
getchar();
if(CheckOut(s, i) == 1)
{
memset(s[i] -> name, 0, 8);
s[i] -> sex = ' ';
s[i] -> age = 0;
return ;
}
Index ++;
}
}
void QueryInfo(Stu *s[])
{
int i, check;
int flag = 0, flag1 = 0;
char sname[20] = {0};
system("clear");
for(i = 0; i < Index; ++i)
{
if(strcmp(s[i] -> name," ") != 0)
{
flag1 = 1;
}
}
if(Index == 0 || flag1 == 0)
{
printf("没有学生信息\n");
sleep(3);
return;
}
printf("请输入查询学生的姓名\n");
scanf("%s", sname);
check = CheckInfo(sname);
if(1 == check)
{
printf("输入不合法姓名");
return;
}
for(i = 0; i < Index; ++i)
{
if(strcmp(s[i]->name, sname) == 0)
{
flag = 1;
printf("姓名:%s\t性别:%c\t年龄:%d\n", s[i] ->name, s[i] ->sex, s[i] ->age);
sleep(3);
}
}
if(i == Index - 1 && flag == 0)
{
printf("%d", Index);
printf("\t\t没有这名学生信息\n");
sleep(3);
return;
}
}
/*修改指定学生信息*/
void ModifyInfo(Stu *s[])
{
int i, check;
char name[20] = {0};
int flag = 0;
system("clear");
printf("%d\n", Index);
printf("请输入要修改学生的姓名\n");
scanf("%s", name);
check = CheckInfo(name);
if(1 == check)
{
printf("输入不合法姓名");
return;
}
for(i = 0; i < Index; ++i)
{
if(strcmp(s[i]->name, name) == 0)
{
flag = 1;
printf("原来信息:姓名:%s\t性别:%c\t年龄:%d\n", s[i] ->name, s[i] ->sex, s[i] ->age);
printf("请输入更新的信息\n");
printf("请输入姓名\n");
scanf("%s", s[i] -> name);
getchar();
printf("请输入性别\n");
scanf("%c", &s[i] -> sex);
getchar();
printf("请输入年龄\n");
scanf("%d", &s[i] -> age);
getchar();
if(CheckOut(s, i) == 1)
{
memset(s[i] -> name, 0, 8);
s[i] -> sex = ' ';
s[i] -> age = 0;
return ;
}
}
}
if(i == Index - 1 && flag == 0)
{
printf("\t\t没有这名学生信息\n");
}
}
/*删除指定学生信息*/
void DeletInfo(Stu *s[])
{
int i, check;
char name[20] = {0};
int flag = 0;
system("clear");
printf("请输入要删除学生的姓名\n");
scanf("%s", name);
check = CheckInfo(name);
if(1 == check)
{
printf("输入不合法姓名");
return;
}
for(i = 0; i < Index; ++i)
{
if(strcmp(s[i]->name, name) == 0)
{
flag = 1;
printf("\t\t原来信息:姓名:%s\t性别:%c\t年龄:%d\n", s[i] ->name, s[i] ->sex, s[i] ->age);
memset(s[i] -> name, 0, 8);
s[i] -> sex = ' ';
s[i] -> age = 0;
}
}
if(i == Index - 1 && flag == 0)
{
printf("\t\t没有这名学生信息\n");
}
}
/*显示所有学生信息*/
void ShowallInfo(Stu *s[])
{
int i, j;
Stu *tmp;
system("clear");
if(Index == 1)
{
printf("\t\t姓名:%s\t性别:%c\t年龄:%d\n", s[0] ->name, s[0] ->sex, s[0] ->age);
sleep(3);
}else if(Index > 1)
{
for(i = 0; i < Index; ++i)
{
for(j = 0; j < Index - i - 1; ++j)
{
if(CompareName(s[j] -> name, s[j + 1] ->name) == 0)
{
tmp = s[j];
s[j] = s[j + 1];
s[j + 1] = tmp;
}
}
}
for(i = 0; i < Index; ++i)
{
if(strcmp(s[i] -> name,"\0") != 0)
{
printf("\t\t姓名:%s\t性别:%c\t年龄:%d\n", s[i] ->name, s[i] ->sex, s[i] ->age);
}
}
sleep(2);
}else
{
printf("没有学生信息\n");
return ;
}
}
int main()
{
int choice;
Stu *student[20] = {0};
Welcome();
system("clear");
while(1)
{ choice = Menu();
switch(choice)
{
case 1: InsertInfo(student);
break;
case 2: QueryInfo(student);
break;
case 3: ModifyInfo(student);
break;
case 4: DeletInfo(student);
break;
case 5: ShowallInfo(student);
break;
case 6: printf("*****************欢迎再次登陆,再见!********************\n");
exit(1);
break;
default: printf("*********************FBI WARNING*************************\n");
exit(1);
}
}
return 0;
}