c语言学生信息处理系统linux下.docx
- 文档编号:10307041
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:18
- 大小:70.86KB
c语言学生信息处理系统linux下.docx
《c语言学生信息处理系统linux下.docx》由会员分享,可在线阅读,更多相关《c语言学生信息处理系统linux下.docx(18页珍藏版)》请在冰豆网上搜索。
c语言学生信息处理系统linux下
实验题目:
学生信息管理系统
实验要求:
用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。
提示:
用一个结构体类型表示学生信息
1typedefstructnode/*定义结构体*/
2{
3intnum;//学号
4charname[15];//姓名
5charsex[9];//性别
6intage;//年龄
7intenglish;//英语成绩
8intmath;//数学成绩
9intcomputer;//计算机成绩
10intaverage;//平均成绩
11structnode*next;//链表指针域
12}student_info;
运行过程中采用一个结构体链表存储学生信息。
退出系统时可以采用文件存储用户输入的信息,再次运行的时候从文件中读取。
完整C语言程序分为三个文件,student.h、student.cpp和main.c文件。
具体实现如下所示:
student.h文件中定义学生信息结构体,操作函数声明。
1#ifndefSTUDENT_HEAD
2#defineSTUDENT_HEAD
3
4typedefstructnode/*定义结构体*/
5{
6intnum;//学号
7charname[15];//姓名
8charsex[9];//性别
9intage;//年龄
10intenglish;//英语成绩
11intmath;//数学成绩
12intcomputer;//计算机成绩
13intaverage;//平均成绩
14structnode*next;//链表指针域
15}student_info;
16
17//学生信息链表
18externstudent_info*student_list;//全局变量声明
19
20
21//初始化函数声明
22//初始化学生信息链表
23voidinit_student_info_list();
24//判断学生信息链表是否为空
25intstudent_list_empty();
26
27//操作函数声明
28//向学校信息表中添加学生信息记录
29intadd_student_info();
30//根据学号删除学生信息
31intdelete_student_info(intnum);
32//根据学号修改学生信息
33intmodify_student_info(intnum);
34//根据学号查找学生信息
35student_info*search_student_info(intnum);
36//输出每个学生的平均成绩
37voiddisplay_average();
38//显示所有学生信息
39voiddisplay_student_info();
40//将学生信息保存到文件
41intsave_file();
42//从文件中读取学生信息
43intread_file();
44#endif
student.c文件中是对student.h文件中声明的函数进行定义,给出具体的实现代码。
1#include"student.h"
2#include
3#include
4#include
5
6//初始化学生信息链表
7voidinit_student_info_list()
8{
9//学生信息链表头结点
10student_list=(student_info*)malloc(sizeof(student_info));
11student_list->next=NULL;
12}
13//判断学生信息链表是否为空
14intstudent_list_empty()
15{
16returnstudent_list->next==NULL;
17}
18//操作函数实现
19//向学校信息表中添加学生信息记录
20intadd_student_info()
21{
22student_info*pstu=(student_info*)malloc(sizeof(student_info));
23if(pstu==NULL)
24{
25printf("内存分配失败.\n");
26return0;
27}
28printf("请按要求一次输入学生的信息.\n");
29printf("请输入学号:
");
30scanf("%d",&pstu->num);
31//判断该学号是否已经存在
32if(search_student_info(pstu->num)!
=NULL)
33{
34printf("该学号已经存在学生信息表中.\n");
35return0;
36}
37printf("请输入姓名:
");
38getchar();
39gets(pstu->name);
40printf("请输入性别:
");
41scanf("%s",pstu->sex);
42printf("请输入年龄:
");
43scanf("%d",&pstu->age);
44printf("请输入英语成绩:
");
45scanf("%d",&pstu->english);
46printf("请输入数学成绩:
");
47scanf("%d",&pstu->math);
48printf("请输入计算机成绩:
");
49scanf("%d",&pstu->computer);
50pstu->average=(pstu->english+pstu->math+pstu->computer)/3;
51//每次从学生信息链表的头部插入;
52pstu->next=student_list->next;
53student_list->next=pstu;
54return1;
55}
56//根据学号删除学生信息
57intdelete_student_info(intnum)
58{
59student_info*pstu;
60student_info*qstu;
61if(search_student_info(num)==NULL)
62{
63printf("不存在该学好为%d的学生信息.\n",num);
64return0;
65}
66pstu=student_list->next;
67qstu=student_list;
68while(pstu->num!
=num)
69{
70qstu=pstu;
71pstu=pstu->next;
72}
73qstu->next=pstu->next;
74free(pstu);
75return1;
76}
77//根据学号修改学生信息
78intmodify_student_info(intnum)
79{
80intchoice;
81student_info*pstu=search_student_info(num);
82if(pstu==NULL)
83{
84printf("不存在该学好为%d的学生信息.\n",num);
85return0;
86}
87printf("1.姓名2.性别3.年龄4.英语成绩5.数学成绩6.计算机成绩.\n");
88printf("请选择修改的信息:
");
89scanf("%d",&choice);
90switch(choice)
91{
92case1:
93printf("请输入新的姓名:
");
94getchar();
95gets(pstu->name);
96break;
97case2:
98printf("请输入新的性别:
");
99scanf("%s",pstu->sex);
100break;
101case3:
102printf("请输入新的年龄:
");
103scanf("%d",&pstu->age);
104break;
105case4:
106printf("请输入新的英语成绩:
");
107scanf("%d",&pstu->english);
108break;
109case5:
110printf("请输入新的数学成绩:
");
111scanf("%d",&pstu->math);
112break;
113case6:
114printf("请输入新的计算机成绩:
");
115scanf("%d",&pstu->computer);
116break;
117default:
118printf("请按提示要求操作.\n");
119}
120return1;
121}
122//根据学号查找学生信息
123student_info*search_student_info(intnum)
124{
125student_info*pstu;
126pstu=student_list->next;
127while(pstu&&pstu->num!
=num)
128{
129
130pstu=pstu->next;
131}
132returnpstu;
133}
134//输出每个学生的平均成绩
135voiddisplay_average()
136{
137student_info*pstu;
138pstu=student_list->next;
139while(pstu)
140{
141printf("学号为%d,姓名为%s的学生平均成绩为:
%d\n",pstu->num,pstu->name,pstu->average);
142pstu=pstu->next;
143}
144}
145//显示所有学生信息
146voiddisplay_student_info()
147{
148student_info*pstu;
149pstu=student_list->next;
150printf("所有学生信息如下所示.\n");
151printf("学号\t姓名\t性别\t年龄\t英语\t数学\t计算机\t平均成绩.\n");
152while(pstu)
153{
154printf("%d\t",pstu->num);
155printf("%s\t",pstu->name);
156printf("%s\t",pstu->sex);
157printf("%d\t",pstu->age);
158printf("%d\t",pstu->english);
159printf("%d\t",pstu->math);
160printf("%d\t",pstu->computer);
161printf("%d\n",pstu->average);
162pstu=pstu->next;
163}
164}
165//将学生信息保存到文件
166intsave_file()
167{
168FILE*pfile;
169student_info*pstu;
170pfile=fopen("student.txt","w");
171if(pfile==NULL)
172{
173printf("打开文件失败.\n");
174return0;
175}
176pstu=student_list->next;
177while(pstu)
178{
179fprintf(pfile,"%5d%15s%9s%3d%4d%4d%4d%4d",pstu->num,pstu->name,pstu->sex,pstu->age,
180pstu->english,pstu->math,pstu->computer,pstu->average);
181pstu=pstu->next;
182}
183fclose(pfile);
184return1;
185}
186
187//从文件中读取学生信息
188intread_file()
189{
190FILE*pfile;
191student_info*pstu;
192pfile=fopen("student.txt","r");
193if(pfile==NULL)
194{
195printf("打开文件失败.\n");
196return0;
197}
198while(!
feof(pfile))
199{
200pstu=(student_info*)malloc(sizeof(student_info));
201fscanf(pfile,"%5d%15s%9s%4d%4d%4d%4d%4d",&pstu->num,pstu->name,pstu->sex,&pstu->age,
202&pstu->english,&pstu->math,&pstu->computer,&pstu->average);
203pstu->average=(pstu->english+pstu->math+pstu->computer)/3;
204//每次从学生信息链表的头部插入;
205pstu->next=student_list->next;
206student_list->next=pstu;
207}
208fclose(pfile);
209return1;
210}
主函数main.c文件进行测试调用,如下所示:
1#include"student.h"
2#include
3#include
4
5voidmenu();
6
7//学生信息链表
8student_info*student_list;
9
10//用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。
11intmain()
12{
13intchoice;
14intnum;
15printf("**************************\n");
16printf("欢迎使用学生信息管理系统\n");
17printf("**************************\n");
18printf("-----------------------------\n");
19init_student_info_list();
20if(read_file())
21printf("从文件中读取学生信息成功.\n");
22else
23printf("从文字中读取学生信息失败.\n");
24printf("-----------------------------\n");
25menu();
26while
(1)
27{
28printf("请选择操作:
");
29scanf("%d",&choice);
30switch(choice)
31{
32case1:
33if(student_list_empty())
34printf("学生信息表为空,请先添加学生信息.\n");
35else
36display_student_info();
37break;
38case2:
39if(add_student_info())
40printf("添加学生信息成功.\n");
41else
42printf("添加学生信息失败.\n");
43break;
44case3:
45if(student_list_empty())
46printf("学生信息表为空,请先添加学生信息.\n");
47else
48{
49printf("请输入要删除学生信息的学号:
");
50scanf("%d",&num);
51if(delete_student_info(num))
52printf("成功删除该学号对应的学生信息.\n");
53else
54printf("删除失败.\n");
55}
56break;
57case4:
58if(student_list_empty())
59printf("学生信息表为空,请先添加学生信息.\n");
60else
61{
62printf("请输入要修改学生信息的学号:
");
63scanf("%d",&num);
64if(modify_student_info(num))
65printf("成功修改该学号对应的学生信息.\n");
66else
67printf("修改失败.\n");
68}
69break;
70case5:
71if(student_list_empty())
72printf("学生信息表为空,请先添加学生信息.\n");
73else
74display_average();
75break;
76case6:
77if(student_list_empty())
78printf("学生信息表为空,请先添加学生信息.\n");
79else
80if(save_file())
81printf("保存学生信息成功.\n");
82else
83printf("保存学生信息失败.\n");
84break;
85case0:
86printf("欢迎下次使用,再见.\n");
87system("pause");
88exit(0);
89break;
90default:
91printf("输入错误,请重新选择操作.\n");
92}
93}
94system("pause");
95return0;
96}
97
98voidmenu()
99{
100printf("1.查看学生信息.\n");
101printf("2.添加学生信息.\n");
102printf("3.删除学生信息.\n");
103printf("4.修改学生信息.\n");
104printf("5.输出平均成绩.\n");
105printf("6.保存学生信息.\n");
106printf("0.退出系统操作.\n");
107}
程序执行结果如下所示:
(1)第一次执行没有学生信息,读取文件失败。
(2)以后执行先从文件中读取学生信息,然后进行操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 信息处理 系统 linux