C++学生学籍管理系统

题目描述:设计一个简单的学籍管理系统,实现出最基本的功能。
功能需求:
(1) 设计一个学生类Student,包含学号,姓名,宿舍,电话。
(2) 设计一个学生成绩类Score,包括学号,课程名称,分值。
(3) 添加、删除、修改学生信息功能。对重复录入进行检查。
(4) 添加,删除,修改学生成绩功能。对重复录入进行检查。
(5) 根据学生学号,查询该学生信息,以及成绩情况。
(6) 使用外部文件存储通讯录信息。

学生类和成绩类都有学号如何处理?希望大佬能给注释

如有帮助望采纳。点击我回答右上角【采纳】按钮。

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
 
struct stud  
{  
long num;  
char name[20];  
double score;  
};  
 
typedef struct stucode  
{  
struct stud student ;  
struct stucode *next;  
}L;  
 
 
void menu();  
void createlist(struct stucode **r);  
void out(struct stucode *r);  
void search1(struct stucode *r);  
void search2(struct stucode *r);  
void del(struct stucode **r);  
void insert(struct stucode **r);  
void sort(struct stucode **r);  
 
void main()  
{  
char choose;  
int flag=1;  
struct stucode *r=NULL;  
 
while(flag)  
{  
system("cls");  
menu();  
choose=getchar();  
switch(choose)  
{  
case '1':  
createlist(&r);  
out(r);  
printf("Testing function 1\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '2':  
search1(r);  
printf("Testing function 1\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '3':  
search2(r);  
printf("Testing function 1\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '4':  
del(&r);  
out(r);  
printf("Testing function 1\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '5':  
insert(&r);  
out(r);  
printf("Testing function 1\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '6':  
sort(&r);  
out(r);  
printf("Testing function 1\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '7':  
out(r);  
printf("Testing function 7\nPress any key to continue\n");  
getchar();  
getchar();  
break;  
 
case '0':  
flag=0;  
printf("The end.\n");  
break;  
 
default: printf("\nWrong Selection!(选择错误,请重选!)\n");getchar();getchar();  
}  
}  
}  
 
void createlist(struct stucode **r)  
{  
struct stucode *p,*t;  
long n;  
char a[20];  
double s;  
if(*r) *r=NULL;  
printf(" \n请输入:\n 学号(请按学号升序排列) 姓名 分数 (若要结束请输入三个为零)  
 
\n");  
scanf("%ld%s%lf",&n,a,&s);  
if(n==0) return;  
 
p=(L *)malloc(sizeof(L));  
p->student.num=n;  
strcpy(p->student.name,a);  
p->student.score=s;  
p->next=NULL;  
*r=p;  
 
scanf("%ld%s%lf",&n,a,&s);  
 
while(n)  
{  
t=p;  
p=(L *)malloc(sizeof(L));  
p->student.num=n;  
strcpy(p->student.name,a);  
p->student.score=s;  
p->next=NULL;  
t->next=p;  
scanf("%ld%s%lf",&n,a,&s);  
}  
}  
 
void search1(struct stucode *r)  
{  
long x;  
if(!r)  
{  
printf("没有学生信息可查询!\n");  
return ;  
}  
printf(" 请输入要查询的学生信息的学生学号:\n");  
scanf("%ld",&x);  
while(r&&r->student.num!=x)  
r=r->next;  
if(r==NULL)  
printf("Error! No such student !\n");  
else  
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);  
}  
void search2(struct stucode *r)  
{  
char m[20];  
if(!r)  
{  
printf("没有学生信息可查询!\n");  
return ;  
}  
 
printf(" 请输入要查询的学生信息的学生姓名:\n");  
scanf("%s",m);  
while(r&&strcmp(r->student.name,m))  
r=r->next;  
if(r==NULL)  
printf("Error! No such student !\n");  
else  
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);  
}  
void del(struct stucode **r)  
{  
long k;  
struct stucode *p=*r,*t;  
if(!(*r))  
{  
printf("没有学生信息可删除 !\n");  
return ;  
}  
printf(" 请输入要删除的学生信息的学生学号:\n");  
scanf("%ld",&k);  
 
if(p->student.num==k)  
*r=(*r)->next,free(p);  
else  
{  
while(p->next&&p->next->student.num!=k)  
p=p->next;  
if(p->next==NULL)  
printf("Error! No such student !\n");  
else  
{  
t=p->next;  
p->next=p->next->next;  
free(t);  
}  
}  
 
}  
void insert(struct stucode **r)  
{  
long n;  
char a[20];  
double s;  
 
 
 
L *p,*t,*k;  
printf(" 请输入要插入的学生信息的学生学号 姓名 分数:\n");  
scanf("%ld%s%lf",&n,a,&s);  
p=(L *)malloc(sizeof(L));  
p->student.num=n;  
p->student.score=s;  
strcpy(p->student.name,a);  
if(!(*r))  
{  
*r=p;  
(*r)->next=NULL;  
return ;  
}  
if(p->student.num<(*r)->student.num)  
p->next=(*r),(*r)=p;  
else  
{  
t=*r;  
k=t;  
while(t->next&&t->next->student.num<=p->student.num)  
t=t->next;  
p->next=t->next;  
t->next=p;  
*r=k;  
}  
}  
 
 
void sort(struct stucode **r)  
{  
struct stucode *t,*p,*q,*z;  
if(!r)  
{  
printf("没有学生信息可排序!\n");  
return ;  
}  
 
if(!(*r)||!(*r)->next)  
return;  
 
t=*r;  
p=t->next;  
t->next=NULL;  
while(p)  
{  
q=p->next;  
if(p->student.score>t->student.score)  
{  
p->next=t;  
t=p;  
}  
else  
{  
z=t;  
while(z->next&&z->next->student.score>=p->student.score)  
z=z->next;  
p->next=z->next;  
z->next=p;  
}  
 
 
p=q;  
}  
*r=t;  
 
}  
void out(struct stucode *r)  
{  
printf("\n\n");  
if(!r)  
{  
printf("没有学生信息可输出!\n");  
return ;  
}  
 
while(r)  
{  
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score);  
r=r->next;  
}  
printf("\n\n");  
}  
void menu()  
{  
printf("\n 学生信息管理系统\n");  
printf("\n 菜单\n\n");  
printf("\n 1建立链表并显示\n");  
printf("\n 2查找某学号的学生信息\n");  
printf("\n 3查找某姓名的学生信息\n");  
printf("\n 4删除某学号的学生信息\n");  
printf("\n 5插入新的学生信息\n");  
printf("\n 6按分数降序排列输出\n");  
printf("\n 7输出\n");  
printf("\n 0退出\n");  
 
printf("\n 请选择您要执行的选项:\n");  
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m