学生管理dos版1.0
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <string.h>
// #include <graphics.h> // 引用图形库头文件
// #include <conio.h>
// status
#define SUCCESS 1
#define ERROR 0
typedef int STATUA;
#define MAXSIZE 100
// Data
typedef struct{
int stuID;
char stuName[100];
float stuScore;
}student;
typedef struct{
student stuDatas[MAXSIZE];
int length;
}stuList;
stuList pro;//全局变量
// Operation
/*getstu(L,i,*e):获取链表第index位置的元素,返回给e
inserStu(*L,i,e):插入新元素e在链表第index的位置上
deleteStu(*L,i,*e):删除第index位置的元素
changeStu(*L,i,e):修改第index位置的元素为e
*/
// 获取链表元素
STATUA getStu(stuList pro,int index,student *stuSomeOne){
if(pro.length==0||index<1||index>pro.length){
return ERROR;
}
*stuSomeOne = pro.stuDatas[index-1];
return SUCCESS;
}
// 插入链表元素
STATUA insertStu(stuList *pro,int index,student stuSomeOne){
if(index<1||index>pro->length+1){
return ERROR;
}
if(index==pro->length+1){//在末尾插入
pro->stuDatas[pro->length]=stuSomeOne;
pro->length++;
}else{//在中间插入
for(int i=pro->length;i>=index;i--){
pro->stuDatas[i]=pro->stuDatas[i-1];
}
pro->stuDatas[index-1]=stuSomeOne;
pro->length++;
}
return SUCCESS;
}
// 删除链表元素
STATUA deleteStu(stuList *pro,int index,student *stuSomeOne){
int i;
if(pro->length==0||index<1||index>pro->length){
return ERROR;
}
//将index位置之后的元素前移
for(i=index;i<=pro->length;i++){
pro->stuDatas[i-1]=pro->stuDatas[i];
}
pro->length--;
return SUCCESS;
}
// 修改链表元素
STATUA changeStu(stuList *pro,int index,student stuSomeOne){
if(pro->length==0||index<1||index>pro->length){
return ERROR;
}
pro->stuDatas[index-1]=stuSomeOne;
}
// void initWin(){
// initgraph(600, 600,EW_DBLCLKS); // 创建绘图窗口,大小为 640x480 像素
// IMAGE background;
// loadimage(&background,"resources\\background.png",600,600,1);
// putimage(0,0,&background);
// // circle(200, 200, 100); // 画圆,圆心(200, 200),半径 100
// _getch(); // 按任意键继续
// closegraph(); // 关闭绘图窗口
// }
void InitListReadFile(stuList *pro,char *fileName);
void WriteListFile(stuList *pro,char *fileName);
void listListen(stuList *pro);
void showAllStu(stuList *pro);
void proAddStu(stuList *pro);
void prodelStu(stuList *pro);
int main(){
//初始化对文件进行读操作
InitListReadFile(&pro,"test.txt");
// initWin();
// return 0;
listListen(&pro);
scanf("%d");
}
// 应用操作
/*
应用层面操作
*/
void InitListReadFile(stuList *pro,char *fileName){//读文件操作
FILE *fp;
fp=fopen(fileName,"r");
// printf("插入成功\n插入对象:");
student stu;int index=0;
while(fscanf(fp,"%d\t%s\t%f\n",&stu.stuID,stu.stuName,&stu.stuScore) != EOF){
if(insertStu(pro,++index,stu)){
printf("插入成功\n插入对象:");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}else{
printf("插入失败\n");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}
}
fclose(fp);
}
void WriteListFile(stuList *pro,char *fileName){//写文件操作
FILE *fp;
fp=fopen(fileName,"w");
if(fp==NULL){
printf("文件打开失败");
return ;
}
for(int i=0;i<pro->length;i++){
fprintf(fp,"%d\t%s\t%f\n",pro->stuDatas[i].stuID,pro->stuDatas[i].stuName,pro->stuDatas[i].stuScore);
}
fclose(fp);
}
void listListen(stuList *pro){//监听事件
while(1){
printf("--------------------\n");
printf("-----1.添加学生------\n");
printf("-----2.删除学生------\n");
printf("-----3.修改学生------\n");
printf("-----4.查询学生------\n");
printf("-----0.退出程序------\n");
printf("--------------------\n");
int btn; scanf("%d",&btn);
switch(btn){
case 1://插入元素
proAddStu(pro);
break;
case 2://删除元素
prodelStu(pro);
break;
case 3://修改元素
break;
case 4://查询元素
showAllStu(pro);
break;
case 0://退出关闭程序
exit(0);
break;
}
WriteListFile(pro,"test.txt");
// printf("\n%s\n",pro.stuDatas[0].stuName);
}
}
void showAllStu(stuList *pro){
for(int i=0;i<pro->length;i++){
printf("%d ",pro->stuDatas[i].stuID);
printf("%s ",pro->stuDatas[i].stuName);
printf("%.2f\n",pro->stuDatas[i].stuScore);
}
printf("\n%d",pro->length);
}
void proAddStu(stuList *pro){//插入学生
printf("输入:位置:%%d 学号:%%d 姓名:%%s 成绩:%%f\n");
int stuID,index;char stuName[100];float stuScore;
printf("位置:");scanf("%d",&index);
printf("学号:");scanf("%d",&stuID);
printf("姓名:");scanf("%s",stuName);
printf("成绩:");scanf("%f",&stuScore);
// scanf("%d %d %s %f",&index,&stuID,stuName,&stuScore);
student stu;
stu.stuID=stuID;strcpy(stu.stuName,stuName);stu.stuScore=stuScore;
if(insertStu(pro,index,stu)){
printf("插入成功\n插入对象:");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}else{
printf("插入失败\n");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}
}
void prodelStu(stuList *pro){//删除学生
printf("输入:位置:%%d");
int index;
scanf("%d",&index);
student stu;
if(deleteStu(pro,index,&stu)){
printf("删除成功\n");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}else{
printf("删除失败\n");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}
}
void proEdiStu(stuList *pro){
printf("输入:需修改位置:%%d");
int stuID,index;char stuName[100];float stuScore;
scanf("%d",&index);
student stu;
printf("输入:位置:%%d 学号:%%d 姓名:%%s 成绩:%%f\n");
printf("学号:");scanf("%d",&stuID);
printf("姓名:");scanf("%s",stuName);
printf("成绩:");scanf("%f",&stuScore);
stu.stuID=stuID;strcpy(stu.stuName,stuName);stu.stuScore=stuScore;
if(changeStu(pro,index,stu)){
printf("插入成功\n插入对象:");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}else{
printf("插入失败\n");
printf("%d %s %.2f\n",stu.stuID,stu.stuName,stu.stuScore);
}
}
void proGetStu(stuList *pro){
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
← 顺序链表课程设计报告 作业→