
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct student{
int num;
int scores[3];
char name[20];
double average;
struct student *next;
}Node,*List;
Node *CreateHead();
void InsertNode(List head);
void Show(List head);
void modify(List head);
void Search(List head);
void sort(List head);
void deleteMsg(List head);
int main(int argc, char *argv[]) {
int i;
Node *h = (Node*)malloc(sizeof(Node));
h = CreateHead();
while(1){
printf("学生管理系统(可输入汉字)\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("1输入学生数据\t\t");
printf("2修改学生数据\t\t");
printf("3查找学生成绩\n");
printf("4排列学生数据\t\t");
printf("5保存学生成绩\t\t");
printf("6删除学生资料\n");
printf("7显示学生资料\t\t");
printf("0结束程序\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("操作方式:");
scanf("%d",&i);
switch(i){
case 1:
InsertNode(h);
break;
case 2:
modify(h);
break;
case 3:
Search(h);
break;
case 4:
sort(h);
break;
case 5:
break;
case 6:
deleteMsg(h);
break;
case 7:
Show(h);
break;
case 0:
printf("退出了学生管理系统");
exit(0);
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
return 0;
}
void add(List temp){
printf("请输入学生学号:\n");
scanf("%d",&temp->num);
printf("请输入学生姓名:\n");
scanf("%s",&temp->name);
printf("请输入学生语文成绩:\n");
scanf("%d",&temp->scores[0]);
printf("请输入学生数学成绩:\n");
scanf("%d",&temp->scores[1]);
printf("请输入学生英语成绩:\n");
scanf("%d",&temp->scores[2]);
}
Node *CreateHead(){
List head = (List)malloc(sizeof(Node));
head->next = NULL;
head->num = 0;
return head;
}
void InsertNode(List head){
Node *node = head;
Node *temp = (Node*)malloc(sizeof(Node));
add(temp);
while(node->next != NULL){
node = node->next;
}
node->next = temp;
}
void Show(List head){
if(head->next == NULL){
printf("学生为空,没有数据!!!\n");
}else{
List temp = head->next;
double average,sum=0;
printf("学号\t\t姓名\t\t语文成绩\t数学成绩\t英语成绩\t个人平均成绩\n");
while(temp != NULL){
for(int i = 0;i < 3;i++){
sum += temp->scores[i];
}
temp->average = sum/3;
printf("%d\t\t%s\t\t%d\t\t%d\t\t%d\t\t%.2lf\n",temp->num,temp->name,temp->scores[0],temp->scores[1],
temp->scores[2],temp->average);
temp = temp->next;
}
}
}
void modify(List head){
if(head->next == NULL){
printf("学生为空,没有数据!!!\n");
}else
{
int nums;
printf("请输入你要修改的学生学号:");
scanf("%d",&nums);
Node* temp = head->next;
while(temp != NULL){
if(temp->num == nums){
add(temp);
break;
}else{
temp = temp->next;
if(temp == NULL){
printf("系统中未存储此同学信息!");
break;
}
}
}
}
}
// int num,i=0,ch,ma,en;
// char str[20];
// printf("请输入你要修改的学生学号:");
// scanf("%d",&num);
// Node* temp = head;
// while(temp->next != NULL){
// if(temp->next->num == num){
// do{
// printf("请输入你要查找的内容\n");
// printf("1.姓名\t");
// printf("2.语文成绩\t");
// printf("3.数学成绩\t");
// printf("4.英语成绩\t");
// printf("5.退出修改\n");
// scanf("%d",&i);
// switch(i){
// case 1:
// printf("请输入修改的名称:");
// scanf("%s",&str);
// strcpy(temp->name,str);
// break;
// case 2:
// printf("请输入修改的语文成绩:");
// scanf("%d",&ch);
// temp->scores[0] = ch;
// break;
// case 3:
// printf("请输入修改的数学成绩:");
// scanf("%d",&ma);
// temp->scores[1] = ch;
// break;
// case 4:
// printf("请输入修改的英语成绩:");
// scanf("%d",&en);
// temp->scores[2] = ch;
// break;
// case 5:
// printf("修改功能已退出");
// exit(0);
// default:
// printf("输入错误,请正确输入1~5\n");
// break;
// }
// }while(1);
// }else{
// temp = temp->next;
// }
// }
void Search(List head){
if(head->next == NULL){
printf("链表为空!\n");
return;
}else{
int num,sum=0;
printf("请输入要查找的学生学号:");
scanf("%d",&num);
Node* temp = head->next;
while(temp != NULL){
if(temp->num == num){
for(int i = 0;i < 3;i++){
sum += temp->scores[i];
}
temp->average = sum/3;
printf("%d\t\t%s\t\t%d\t\t%d\t\t%d\t\t%.2lf\n",temp->num,temp->name,temp->scores[0],temp->scores[1],
temp->scores[2],temp->average);
break;
}else{
temp = temp->next;
if(temp == NULL){
printf("系统中没有所要的学生信息");
}
}
}
}
}
void sort(List head){
if(head->next == NULL){
printf("链表为空!\n");
return;
}else{
Node* temp = head->next;
Node* p;
Node* p1 = head;
while(temp != NULL){
p = temp->next;
if(temp->average < p->average){
p1->next = p;
temp->next = p->next;
p->next = temp;
}
temp = temp->next;
p1 = p1->next;
}
}
}
void deleteMsg(List head){
if(head->next == NULL){
printf("学生为空,没有数据!!!\n");
}else
{
int num;
printf("请输入要删除的学生学号:");
scanf("%d",&num);
Node* temp = head->next;
Node* p = head;
while(temp != NULL){
if(temp->num == num){
p->next = temp->next;
printf("删除成功!");
break;
}else{
temp = temp->next;
p = p->next;
if(temp == NULL){
printf("系统中没有所要删除的学生信息");
}
}
}
}
}