1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5
6
7 struct student{
8 char name [20];
9 char num[10];
10 int age ;
11
12 };
13
14 struct Node{
15 struct student data;
16 struct Node *next;
17 };
18
19 //创造一个链表
20 struct Node* createList(struct student data){
21 struct Node* newNode =(struct Node*)malloc(sizeof(struct Node));
22 newNode->data= data;
23 newNode->next= NULL;
24 return newNode ;
25
26 }
27
28 //插入链表,插入数据 :录入信息
29 void insertNodeByHead(struct Node* listHeadNode,struct student data){
30 struct Node* newNode;
31 newNode->next=listHeadNode->next;
32 listHeadNode->next=newNode;
33
34 }
35
36 //删除
37 void deleteNodeByAppoinName(struct Node* listHeadNode,char * name){
38 struct Node* posFrontNode = listHeadNode;
39 struct Node* posNode = listHeadNode->next;
40 if(posNode==NULL){
41 printf("无相关内容
");
42 return;
43 }else{
44 while(strcmp(posNode->data.name,name)){
45 posFrontNode =posNode;
46 posNode =posFrontNode->next;
47 if(posNode==NULL){
48 printf("错误
");
49 return;
50 }
51 }
52 posFrontNode->next= posNode->next;
53 free(posNode);
54 }
55 }
56
57 //查找
58 struct Node* searchNodeByAppoinNum(struct Node* listHeadNode,char*num){
59 struct Node* pMove =listHeadNode->next;
60 if(pMove==NULL)
61 return pMove;
62 else{
63 while(strcmp(pMove->data.num,num)){
64 pMove = pMove->next;
65 if(pMove=NULL)
66 break;
67 }
68 return pMove;
69 }
70 }
71
72 //打印当前结点
73 void printNode(struct Node* curNode){
74 printf("姓名 学号 年龄 ");
75 printf("%s %s %d
",curNode->data.name,curNode->data.num,curNode->data.age);
76 }
77
78 //打印 2,浏览信息
79 void printList(struct Node*listHeadNode){
80 struct Node* pMove = listHeadNode->next;
81 printf("姓名 学号 年龄 ");
82 while(pMove){
83 printf("%s %s %d
",pMove->data.name,pMove->data.num,pMove->data.age);
84 pMove = pMove->next;
85 }
86 printf("
");
87 }
88
89 void systemMenu(){
90 //菜单,用函数来完成
91 printf("============================================
");
92 printf(" 学生成绩管理系统欢迎你
");
93 printf(" 0.退出系统
");
94 printf(" 1.插入信息
");
95 printf(" 2.浏览信息
");
96 printf(" 3.删除信息
");
97 printf(" 4.修改信息
");
98 printf(" 5.查找信息
");
99 printf("============================================
");
100 printf("请输入0~5
");
101 }
102 void keyDown(){
103 struct Node*list =NULL;
104 int useKey;
105 struct student tempData;
106 scanf("%d",&useKey);
107 switch(useKey){
108 case 0:
109 printf(" [退出系统]
");
110 system("pause");
111 exit(0);
112 break;
113 case 1:
114 printf(" [插入信息]
");
115 printf("请输入姓名,学号,年龄");
116 scanf("%s%s%d",tempData.name,tempData.num,&tempData.age);
117 insertNodeByHead(list,tempData);
118 break;
119 case 2:
120 printf(" [浏览信息]
");
121 printList(list);
122 break;
123 case 3:
124 printf(" [删除信息]
");
125 printf("请输入要删除的学生姓名");
126 scanf("%s",tempData.name);
127 deleteNodeByAppoinName(list,tempData.name);
128 break;
129 case 4:
130 printf(" [修改信息]
");
131 printf("请输入要修改的学生的学号");
132 scanf("%s",tempData.num);
133 if(searchNodeByAppoinNum(list,tempData.num)==NULL){
134 printf("未找到相关信息");
135 }
136 else{
137 printf("请输入新的学生信息:姓名,学号,年纪");
138 }
139 break;
140 case 5:
141 printf(" [查找信息]
");
142 printf("请输入查找的学号:");
143 scanf("%s",tempData.num);
144 if(searchNodeByAppoinNum(list,tempData.num)==NULL){
145 printf("未找到相关信息");
146 }
147 else{
148 printNode(searchNodeByAppoinNum(list,tempData.num));
149 }
150 break;
151 default:
152 printf("输出错误,请输出0~5");
153 }
154 }
155 int main (){
156
157 while(1){
158 systemMenu();
159 keyDown();
160 system("pause");
161 system("cls");
162 }
163 return 0;
164 }