今天我们一起来看看学生信息录入系统的初级版吧!!!
目录
一、建立链表节点
二、打印菜单
三、选择系统
四、初始化
五、录入信息
六、追加信息
七、修改信息
八、删除信息
九、查找信息
十、显示信息
十一、退出系统
十二、完整代码
一、建立链表节点
采用结构体实施,分为数据域和指针域,链表的使用是本程序的难点……
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
二、打印菜单
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
三、选择系统
//选择系统
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
四、初始化
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
五、录入信息
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
十一、退出系统
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
//选择系统
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
int main(){
selec();
return 0;
}
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!
//选择系统
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
四、初始化
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
五、录入信息
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
十一、退出系统
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
//选择系统
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
int main(){
selec();
return 0;
}
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
十一、退出系统
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
//选择系统
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
int main(){
selec();
return 0;
}
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!
//4、修改信息
void modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
十一、退出系统
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
//选择系统
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
int main(){
selec();
return 0;
}
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!
//6、查找信息
void find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
十一、退出系统
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
//选择系统
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
int main(){
selec();
return 0;
}
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
十二、完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
typedef struct STUDENT{
char xh[20], xm[20];//学号、姓名
float cj;//成绩
struct STUDENT* next;
}Student;
typedef struct HEADER{
char bjm[20];//班级名
int cnt;//班级人数
struct STUDENT* next;
}Header;
//菜单
void menu(){
int i = 0;
system("cls");
for (i = 0; i < 52; i++)
printf("*");
printf("n");
puts("* 1、初始化 2、录入信息 3、追加信息 4、修改信息 *");
puts("* 5、删除信息 6、查找信息 7、显示信息 8、退出系统 *");
for (i = 0; i<52; i++)
printf("*");
}
//1、初始化
void init(Header *head){
printf("输入班级名:> ");
scanf("%s", head->bjm);
printf("输入班级人数:> ");
scanf("%d", &head->cnt);
head->next = 0;
printf("初始化完毕n");
system("pause");
}
//2、录入信息
void input(Header *head){
Student *tail;//尾指针
head->next =NULL;
printf("录入学生的信息:学号 姓名 成绩n");
for (int i = 0; icnt; 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 append(Header *head){
int i,j;
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",&i);
j=i;
while(--i)
{
p=p->next;
}
printf("请输入第%d个学生的学号,姓名,成绩:n",++j);
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 modify(Header *head){
int i;
Student *p;
p=head->next;
printf("请选择你要修改第几个学生的信息:> ");
scanf("%d",&i);
while(--i) p=p->next;
if(p==NULL)
{
printf("该学生不存在!");
return;
}
else
{
puts("请选择你要修改的内容:");
puts("n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **n");
fflush(stdout);//刷新输出——清空读写缓冲区
scanf("%d",&i);
switch(i)
{
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 del(Header *head){
int i,flag=1;
Student*p=head->next;
Student*q=head->next;
Student*k=head->next;
head->next=NULL;
printf("请输入你要删除第几名学生的信息:>");
scanf("%d",&i);
if(i==1){//删除第一个
p=p->next;
head->next=p;
free(q);
head->cnt--;
printf("删除信息完毕!n");
system("pause");
return;
}
while(--i)
{
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 find(Header *head){
int i;
Student*p=head->next;
char Xh[20],Xm[20];
puts("n** 1 按学号查找 *** 2 按姓名查找 **n");
printf("请选择你想查找的方式:> ");
scanf("%d",&i);
if(i!=1&&i!=2){
puts("你的选择出错!");
system("pause");
return;
}
if(i==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 show(Header head){
Student *p;
p = head.next;
if(p==NULL)
puts("你还没有录入信息!n");
printf("%s 共有 %d 名学生,具体信息如下:n", head.bjm, head.cnt);
for (int i = 0; ixh, p->xm, p->cj);
p = p->next;
}
printf("信息显示完毕!n");
system("pause");
}
//8、退出系统
int Exit(){
int i;
again:
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");goto again;
}
return i;
}
int selec(){
Header head={"0"};//整体初始化为0
int i,j;
//选择系统
while(1){
menu();
printf("nn请选择选项:> ");
scanf("%d",&i);
switch(i){
case 1:init(&head);break;
case 2:input(&head);break;
case 3:append(&head);break;
case 4:modify(&head);break;
case 5:del(&head);break;
case 6:find(&head);break;
case 7:show(head);break;
case 8: j=Exit();
if(j==1) return 1;
break;
default:printf("你的选择有误,请重新选择!n");
system("pause");
break;
}
}
}
int main(){
selec();
return 0;
}
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!
程序执行图就不摆了,感兴趣的盆友自行复制执行,不足之处,欢迎在评论区留言,共同进步!



