实现功能:
1. 计算总人数
2. 显示全部学生的信息
3 :添加学生
4 :按名字查找
5 :按名字删除
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(STUDENT)
#define times_select 100
#define MAX 10
void stu_list();
void add_stu();
void display_one();
void display_all();
void select_stu();
typedef struct stu
{
int cl_num;
char name[MAX];
int score[3];
int sum;
float average;
struct stu *next;
}STUDENT;
STUDENT *stu_msg_cre();
STUDENT *search();
STUDENT *head,*last;
STUDENT *display_ptr,*count_ptr,*del_ptr,*sech_ptr;
void init_stu() //初始化学生链表
{
head = (STUDENT *)malloc(LEN);
head->cl_num = -1;
head->next = NULL;
last = head;
del_ptr = head;
sech_ptr = head;
}
void add_stu(STUDENT *new) //添加学生节点
{
last->next = new;
new->next = NULL;
last = new;
}
STUDENT *stu_msg_cre() // 创建学生信息
{
int i;
int total_score = 0;
if(head->cl_num == -1)
{
int num = 0;
head = (STUDENT *)malloc(LEN);
scanf("%d",&num);
head->cl_num = num;
scanf("%s",head->name);
for(i = 0; i < 3; i ++)
{
do
{
scanf("%d",&head->score[i]);
if(head->score[i] > 100)
{
printf(" Data error,please enter again.\n");
}
}while(head->score[i]>100);
head->sum += head->score[i];
}
total_score = head->sum ;
head->average = (float)total_score / 3;
return head;
}
else
{
int n = 0;
STUDENT *stu = (STUDENT *)malloc(LEN);
scanf("%d",&n);
stu->cl_num = n;
scanf("%s",stu->name);
for(i = 0; i < 3; i ++)
{
do
{
scanf("%d",&stu->score[i]);
if(stu->score[i] > 100)
{
printf(" Data error,please enter again.\n");
}
}while(stu->score[i]>100);
stu->sum += stu->score[i];
}
total_score = stu->sum ;
stu->average = (float)total_score / 3;
return stu;
}
}
void display_all() // 打印全部信息
{
display_ptr = (STUDENT *)malloc(LEN);
display_ptr = head;
while(display_ptr != NULL)
{
display_one(display_ptr);
display_ptr = display_ptr->next;
}
}
void display_one(STUDENT *one) // 打印一个学生信息
{
if(one->cl_num == -1)
{
printf("还没有学生!\n");
}
else
{
int i;
printf("%d\t",one->cl_num);
printf("%s\t",one->name);
for(i = 0; i < 3; i ++)
{
printf("%d\t",one->score[i]);
}
printf("M\t",one->sum);
printf("%3.1f\n",one->average);
}
}
STUDENT *search(char name[]) // 按名字查找
{
while(strcmp(sech_ptr->name,name) != 0)
{
sech_ptr = sech_ptr->next;
}
if(sech_ptr == NULL)
{
printf("no exist");
}
return sech_ptr;
}
void delete(STUDENT *stu) //按名字删除
{
STUDENT *temp = (STUDENT *)malloc(LEN);
while(strcmp(del_ptr->name,stu->name) != 0)
{
temp = del_ptr;
del_ptr = del_ptr->next;
}
temp->next = del_ptr->next;
temp = del_ptr;
del_ptr = del_ptr->next;
free(temp);
temp = NULL;
}
int account_stu() //计算学生总数
{
int count = 0;
STUDENT *ptr = (STUDENT *)malloc(LEN);
ptr = head;
while(ptr != NULL)
{
count += 1;
ptr = ptr->next;
}
return count;
}
int main()
{
init_stu();
int n = 1;
while( n < times_select)
{
printf("\n");
printf("****************************************\n");
printf("1 :\t打印总人数\n");
printf("2 :\t显示全部学生的信息\n");
printf("3 :\t添加学生\n");
printf("4 :\t按名字查找\n");
printf("5 :\t按名字删除\n");
printf("6 :\t退出!\n");
printf("**************************************\n");
printf("\n");
int memu_num;
char search_name[20];
char delete_name[20];
STUDENT *new_stu = (STUDENT *)malloc(LEN);
STUDENT *search_stu = (STUDENT *)malloc(LEN);
if(n == 1)
{
printf("请输入你的选择:");
}
if( n > 1)
{
printf("请再次输入你的选择:");
}
scanf("%d",&memu_num);
switch(memu_num)
{
case 1:
{
int n = 0;
n = account_stu();
printf("there are M students\n",n);
}break;
case 2:
{
printf("学号\t姓名\t三门成绩(语、数、外)\t总分\t平均分\n");
display_all();
}break;
case 3:
{
int count;
int i = 0;
int amount ;
printf("请输入将要添加的学生人数\n");
scanf("%d",&amount);
if(amount <= 0)
{
printf("Enter error!\n");
break;
}
while( i < amount)
{
printf(" 请添加您将要添加的第%d个学生信息:\n",i + 1);
printf("Order: 学号 姓名 三门成绩(语、数、外)\n");
new_stu = stu_msg_cre();
add_stu(new_stu);
i ++;
}
}break;
case 4:
{
printf("请输入你要查找的学生的名字:");
scanf("%s",search_name);
search_stu = search(search_name);
printf("学号\t姓名\t三门成绩(语、数、外)\t总分\t平均分\n");
display_one(search_stu);
search_stu = NULL;
}break;
case 5:
{
printf("请输入你要删除的学生的名字:");
scanf("%s",delete_name);
search_stu = search(delete_name);
printf("已删除学生信息:");
display_one(search_stu);
delete(search_stu);
search_stu = NULL;
}break;
case 6:
exit(1);
break;
}
n += 1;
}
return 0;
}