C语言 数据结构学生管理系统
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("无相关内容\n");
42 return;
43 }else{
44 while(strcmp(posNode->data.name,name)){
45 posFrontNode =posNode;
46 posNode =posFrontNode->next;
47 if(posNode==NULL){
48 printf("错误\n");
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("姓名\t学号\t年龄\t");
75 printf("%s\t%s\t%d\t\n",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("姓名\t学号\t年龄\t");
82 while(pMove){
83 printf("%s\t%s\t%d\t\n",pMove->data.name,pMove->data.num,pMove->data.age);
84 pMove = pMove->next;
85 }
86 printf("\n");
87 }
88
89 void systemMenu(){
90 //菜单,用函数来完成
91 printf("============================================\n");
92 printf("\t学生成绩管理系统欢迎你\n");
93 printf("\t0.退出系统\n");
94 printf("\t1.插入信息\n");
95 printf("\t2.浏览信息\n");
96 printf("\t3.删除信息\n");
97 printf("\t4.修改信息\n");
98 printf("\t5.查找信息\n");
99 printf("============================================\n");
100 printf("请输入0~5 \n");
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("\t[退出系统]\n");
110 system("pause");
111 exit(0);
112 break;
113 case 1:
114 printf("\t[插入信息]\n");
115 printf("请输入姓名,学号,年龄");
116 scanf("%s%s%d",tempData.name,tempData.num,&tempData.age);
117 insertNodeByHead(list,tempData);
118 break;
119 case 2:
120 printf("\t[浏览信息]\n");
121 printList(list);
122 break;
123 case 3:
124 printf("\t[删除信息]\n");
125 printf("请输入要删除的学生姓名");
126 scanf("%s",tempData.name);
127 deleteNodeByAppoinName(list,tempData.name);
128 break;
129 case 4:
130 printf("\t[修改信息]\n");
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("\t[查找信息]\n");
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 }