【娱乐大闯关】C语言实现学生信息录入系统
文章目录

一、StuSystem.h
1、头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
2、所录信息
#define MAX 20
typedef struct STUDENT {
char xh[MAX], xm[MAX];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER {
char bjm[MAX];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
3、函数声明
void menu();
void InitStu(Header* head);
void InputStu(Header* head);
void AppendStu(Header* head);
void ModifyStu(Header* head);
void DelStu(Header* head);
void FindStu(Header* head);
void ShowStu(Header head);
int Exit();
二、Main_stusystem.c
1、选择菜单
void menu() {
puts("****************************************************");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 0、退出系统 *");
puts("****************************************************");
printf("请选择:> ");
}
2、选择器
void selec() {
Header head;
int input;
//选择系统
while (1) {
system("cls");
menu();
scanf("%d", &input);
switch (input) {
case 1:InitStu(&head); break;
case 2:InputStu(&head); break;
case 3:AppendStu(&head); break;
case 4:ModifyStu(&head); break;
case 5:DelStu(&head); break;
case 6:FindStu(&head); break;
case 7:ShowStu(head); break;
case 0: if (Exit()) return; break;
default:printf("你的选择有误,请重新选择!n");
system("pause");break;
}
}
}
3、主函数
int main() {
selec();
return 0;
}
三、Fun_stusystem.c
1、初始化
void InitStu(Header* head) {
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = NULL;
printf("初始化完毕n");
system("pause");
}
2、信息录入
void InputStu(Header* head) {
int i = 0;
Student* tail = NULL;//尾指针
head->next = NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (i = 0; i < head->cnt; i++) {
Student* stu;
stu = (Student*)malloc(sizeof(Student));//动态申请一个节点
if (stu == NULL) {//如果stu节点为空,说明没有malloc到空间
printf("mallco Fail!");
return;
}
stu->next = NULL;//初始化stu的指针
if (head->next == NULL) {//说明没有输入数据
head->next = stu;//头节点的下一个指向stu节点
tail = stu;//让尾指针指向stu
scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
}
else {//说明已经输入了数据
tail->next = stu;//尾指针的下一个指向stu
tail = tail->next;//尾指针往下面移动
scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
}
}
printf("录入信息完毕n");
system("pause");
}
3、追加信息
void AppendStu(Header* head) {
int pos, i;
Student* p = head->next;
Student* stu;
stu = (Student*)malloc(sizeof(Student));//申请一个节点用于存放追加的学生的信息
if (stu == NULL) {//如果stu节点为空,说明没有malloc到空间
printf("mallco Fail!");
return;
}
stu->next = NULL;//初始化stu的指针
printf("请选择你要在哪一名学生后面增加一个学生信息:> ");
scanf("%d", &pos);
if (pos<1 || pos>head->cnt) {
puts("所选位置不合法!"); system("pause");
return;
}
i = pos;
while (--pos)
{
p = p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n", ++i);
scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);//输入信息
head->cnt++;//学生人数+1
fflush(stdin);//刷新输入——清空输入缓冲区
stu->next = p->next;
p->next = stu;
printf("追加信息完毕n");
system("pause");
}
4、修改信息
void ModifyStu(Header* head) {
int pos;
Student* p;
p = head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d", &pos);
if (pos<1 || pos>head->cnt) {
puts("所选位置不合法!"); system("pause");
return;
}
while (--pos) p = p->next;
if (p == NULL)
{
printf("该学生不存在!"); system("pause");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d", &pos);
switch (pos)
{
case 1:printf("原信息为%sn", p->xm); printf("请输入你要修改的内容n"); scanf("%s", p->xm); break;
case 2:printf("原信息为%sn", p->xh); printf("请输入你要修改的内容n"); scanf("%s", p->xh); break;
case 3:printf("原信息为%.2fn", p->cj); printf("请输入你要修改的内容n"); scanf("%f", &p->cj); break;
default:printf("你的选择有误!n"); break;
}
fflush(stdin);
}
printf("修改信息完毕n");
system("pause");
}
5、删除信息
void DelStu(Header* head) {
int pos, flag = 1;
Student* p = head->next;
Student* q = head->next;
Student* k = head->next;
head->next = NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d", &pos);
if (pos<1 || pos>head->cnt) {
puts("所选位置不合法!"); system("pause");
return;
}
if (pos == 1) {//删除第一个
p = p->next;
head->next = p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while (--pos)
{
p = p->next;
if (flag == 0) {
q = q->next;
}
flag = 0;
}
if (p->next == NULL) {
q->next = NULL;
head->next = k;
free(p);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
if (p == NULL)
puts("该学生不存在!");
q->next = p->next;
head->next = k;
free(p);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
}
6、查找信息
void FindStu(Header* head) {
int pos;
Student* p = head->next;
char Xh[20], Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d", &pos);
if (pos != 1 && pos != 2) {
puts("你的选择出错!");
system("pause");
return;
}
if (pos == 1) {
printf("请输入该生的学号:n");
scanf("%s", Xh);
while (p) {
if (strcmp(Xh, p->xh) == 0) {
puts("该生的信息如下:");
printf("%s %s %.2fn", p->xh, p->xm, p->cj);
system("pause");
break;
}
p = p->next;
}
}
else {
printf("请输入该生的姓名n");
scanf("%s", Xm);
while (p) {
if (strcmp(Xm, p->xm) == 0) {
puts("该生的信息如下:");
printf("%s %s %.2fn", p->xh, p->xm, p->cj);
system("pause");
break;
}
p = p->next;
}
}
printf("信息查找完毕n");
system("pause");
}
7、显示信息
void ShowStu(Header head) {
Student* p = head.next;
int i;
if (p == NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (i = 0; i < head.cnt; i++) {
printf("%st%st%.2fn", p->xh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
8、退出
int Exit() {
int i;
system("cls");
menu();
puts("nn** 1、确认退出 *** 0、重新开始 **n");
printf("您的选择是:> ");
scanf("%d", &i);
switch (i) {
case 1:printf("退出成功!n"); return i; break;
case 0:break;
default:printf("选择无效,请重新选择!n"); system("pause"); Exit();
}
return i;
}
四、执行结果
初始化
信息录入
追加信息
修改信息
显示信息
删除信息
查找信息
注:此程序只做参考使用,并不完善……