#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 100
typedef struct student STU;
int len = 0;
struct student
{
char name[10];
int num;
int age;
struct student *next;
};
void welcome()
{
system("clear");
printf("\n\n\n\n\t\t\t========================================");
printf("\n\n\t\t\t\t\tWelcome!\n");
sleep(1);
}
void menu()
{
system("clear");
printf("\n\n\t************************************************************************");
printf("\n\t\t\t\t\t请选择:");
printf("\n\t\t\t\t\t1.添加信息");
printf("\n\t\t\t\t\t2.查看信息");
printf("\n\t\t\t\t\t3.查找信息");
printf("\n\t\t\t\t\t4.删除信息");
printf("\n\t\t\t\t\t5.修改信息");
printf("\n\t\t\t\t\t6.排序");
printf("\n\t\t\t\t\t7.退出");
printf("\n\t************************************************************************");
}
/*添加信息*/
void AddInfo(STU *first)
{
system("clear");
printf("姓名 学号 年龄\n");
printf("------------------------\n");
printf("请输入信息:\n");
STU *q = (STU *)malloc(sizeof(STU));
STU *s;
q = first;
char flag = 'y';
if(NULL == q)
{
printf("malloc failure!\n");
}
while(flag == 'y')
{
s = (STU *)malloc(sizeof(STU));
scanf("%s", s->name);
scanf("%d%d", &s->num, &s->age);
s->next = NULL;
q->next = s;
q = s;
len++;
getchar();
printf("继续添加?(y/n)");
scanf("%c", &flag);
}
}
void ShowAll(STU *first)
{
system("clear");
STU *p;
p = first->next;
printf("information:\n");
/*
for(i = 0; i < person; i++)
{
for(j = 0; j < person - 1 - i; j++)
{
if(strcmp(s[j]->name, s[j + 1]->name) > 0)
{
q[0] = s[j];
s[j] = s[j + 1];
s[j + 1] = q[0];
}
}
}
*/
while(p->next)
{
printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
p = p->next;
}
printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
sleep(3);
getchar();
}
/*void Sort(STU *first)
{
int i, j;
STU *p;
p = first->next;
if(p == NULL)
{
printf("没有元素!\n");
}
for(i = 0; i < len; i++)
{
for(j = 0; j < len - 1 - i; j++)
{
if(strcmp(p->name, p->next->name) > 0)
{
STU *s = p;
p = p->next;
p->next = s;
}
}
}
while(p->next)
{
printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
p = p->next;
}
printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
sleep(3);
}*/
/*查找信息*/
void SearchInfo(STU *first)
{
system("clear");
//char *name = (char *)malloc(sizeof(char));
char name[10];
int i, n = 0;
printf("请输入要查找的人的名字:\n");
//fflush(stdin);
scanf("%s", name);
STU *p = NULL;
p = first->next;
for(i = 0; i < len; i++)
{
if(strcmp(name, p->name) == 0)
{
n = 1;
printf("该学生的信息如下:\n");
printf("name:%s, num:%d, age:%d\n", p->name, p->num, p->age);
sleep(3);
break;
}
p = p->next;
}
if(n == 0)
{
printf("不存在!\n");
}
else
{
printf("查找成功!\n");
}
getchar();
}
/*删除信息*/
void DeleteInfo(STU *first)
{
system("clear");
int i, n = 0;
char del_name[10];
STU *p;
p = first->next;
printf("请输入要删除的人的名字:\n");
scanf("%s", del_name);
getchar();
for(i = 0; i < len; i++)
{
if(strcmp(del_name, p->name) == 0)
{
break;
}
n++;
p = p->next;
}
p = first->next;
for(i = 0; i < n - 1; i++)
{
p = p->next;
}
STU *s = p->next;
p->next = s->next;
free(s);
len--;
if(n == 0)
{
printf("要删除的人不存在!\n");
}
else
{
printf("删除成功!\n");
}
}
/*修改信息*/
void ChangeInfo(STU *first)
{
system("clear");
char *name = (char *)malloc(sizeof(char));
char *new_name = (char *)malloc(sizeof(char));
int new_num, new_age;
int i, choice;
printf("请输入要修改的人的名字:\n");
scanf("%s", name);
STU *p;
p = first->next;
for(i = 0; i < len; i++)
{
if(strcmp(name, p->name) == 0)
{
printf("该学生的信息如下:");
printf("name:%s, num:%d, age:%d\n", p->name, p->num, p->age);
printf("----------------------------\n");
printf("请选择要修改的内容(1.name 2.num 3.age):\n");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("请输入新的名字:\n");
scanf("%s", new_name);
strcpy(p->name, new_name);
break;
case 2:
printf("请输入新的学号:\n");
scanf("%d", &new_num);
p->num = new_num;
break;
case 3:
printf("请输入新的年龄:\n");
scanf("%d", &new_age);
p->age = new_age;
break;
}
}
p = p->next;
}
printf("不存在!\n");
}
int main()
{
STU *first = (STU *)malloc(sizeof(STU) * 10);
first->next = NULL;
int choice;
welcome();
while(1)
{
menu();
printf("\nPlease input choice:");
scanf("%d", &choice);
switch(choice)
{
case 1:
AddInfo(first);
break;
case 2:
ShowAll(first);
break;
case 3:
SearchInfo(first);
break;
case 4:
DeleteInfo(first);
break;
case 5:
ChangeInfo(first);
break;
/*case 6:
Sort(first);
break;*/
case 7:
exit(0);
break;
}
}
return 0;
}