期末课设学生信息管理系统链表(有简单解释)-创新互联
本人也是初入编程这个大世界的新手菜鸟,部分代码会很简单明了但也繁琐,还会有很多的词汇不是专业词汇。
成都做网站、网站制作,成都做网站公司-创新互联建站已向上千家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。注:部分代码以及思路来源于 Извините. 作者大大的作品: 《 C语言学生信息管理系统(链表)(无文件操作) 》
作者的其它作品也很优秀哦,很适合刚刚入门的小伙伴。
1.功能实现
密码颜色根据自己要求(初始密码:wypgogogo)
2.本人理解:
大作业最主要的内容就是链表的实现,举个例子(来源于源代码:增加学生信息):
head是第一个结点,那head->next就是第二个结点,q是新增加的结点,让q的下一个结点是原来的第二个,让head(第一个)的下一个结点是新增加的q,那q自然而然成为第二个结点,head->next自然而然成为第三个结点。 (头插法)
小伙伴们可以自己试试尾插法=v=
代码理解:
1.检查
检查部分可以按着自己的要求设置(if中的内容就是自己设的要求,不满足就会重新输入)。
2.录入
因为录入部分的函数return(返回)的是自己建立的链表,所以每次选择录入时都会重新给头结点申请空间,自然而然头换了,后面部分也就没了。(链表单指连续)
3.增删改查部分(个人认为增删改需要重点看)
增已经介绍过了
删:一定要记住不要直接删,否则链表会断开,一定要先把链表连完整(把将要删除的前一个结点连到将要删除的后一个结点)。
改:个人是用了新的结点覆盖了之前的结点,切记链表的连接!!!
查:遍历链表即可,需要用到循环判断。
4.排序(重点看)
冒泡排序(解释太麻烦,看代码看不懂的可以去网上找资源)。
5.性别统计,不及格统计
一些很简单的循环问题和if语句判断问题。
6.文件
主要在网上找视频,了解写文件读文件即可。
7.主函数
对switch语句的运用。
代码部分
#include#include#include#include#includestruct student
{
char id[20];
char name[20];
char sexual[20];
float grade_math;
float grade_English;
float grade_c;
student *next;
};
int color(int number)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),number);
return 0;
}
void menu()
{
system("cls");
printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-登陆成功!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n");
printf("-------------------------___【学生信息管理系统】___--------------------------------\n");
printf(" \n");
printf(" \n");
printf("===================================================================================\n");
printf("********************************------------***************************************\n");
printf("*******************************|| *菜单* ||**************************************\n");
printf("********************************------------***************************************\n");
printf("===================================================================================\n");
printf(" *|* [1]录入学生信息 *|* \n");
printf(" *|* (注录入会把之前存的数据全部消除) *|* \n");
printf(" *|* [2]增加学生信息 *|* \n");
printf(" *|* [3]删除本班学生信息 *|* \n");
printf(" *|* [4]修改本班学生信息 *|* \n");
printf(" *|* [5]查看全部学生信息 *|* \n");
printf(" *|* (注:选择查看请先选择[1]录入成绩) *|* \n");
printf(" *|* [6]性别统计 *|* \n");
printf(" *|* (注:选择性别统计请先选择[1]录入成绩) *|* \n");
printf(" *|* [7]查看专业课不及格的学生信息 *|* \n");
printf(" *|* (注:选择查看专业课不及格的学生请先选择[1]录入成绩) *|* \n");
printf(" *|* [8]按c语言成绩排序(降序) *|* \n");
printf(" *|* [9]保存学生信息 *|* \n")
printf(" *|* [0]退出 *|* \n");
printf("________*|*_____________________________________________________________*|*________\n");
printf("-----------------------------------------------------------------------------------\n");
printf("PS: 不要忘记先录入成绩哦__\n\n");
}
void Check_student(student *NEW)
{
char id[20];
char name[20];
char sexual[20];
float grade_math;
float grade_English;
float grade_c;
while(1)
{
scanf("%s%s%s%f%f%f",&id,&name,&sexual,&grade_math,&grade_English,&grade_c);
printf(" \n");
if(strlen(id)==10&&(strcmp(sexual,"man")==0||strcmp(sexual,"woman")==0)&&(grade_math>=0&&grade_math<=100)&&
(grade_English>=0&&grade_English<=100)&&(grade_c>=0&&grade_c<=100))
{
strcpy(NEW->id,id);
strcpy(NEW->name,name);
strcpy(NEW->sexual,sexual);
NEW->grade_math=grade_math;
NEW->grade_English=grade_English;
NEW->grade_c=grade_c;
return ;
}else{
printf("----- 数据输入错误,请重新输入! -----\n");
getchar();
}
}
system("pause");
}
student *Creat_student()
{
system("cls");
student *head = (student *)malloc(sizeof(student));
student *p = (student *)malloc(sizeof(student));
head->next = NULL;
p = head;
printf("----- 请输入你将要录入学生信息的人数 \n-----");
int n;
scanf("%d",&n);
for(int i=0;i学号(10) 姓名 性别 数学 英语 c语言\n");
printf("--->如 0000000000 张三 man 100 100 100\n");
printf("-------------------------------------------------------------\n");
printf("---->");
Check_student(q);
student *c = (student *)malloc(sizeof(student));
c = head ;
int num = 1;
while(c)
{
if(strcmp(q->id,c->id)==0)
{
num = 0;
break;
}
c = c->next;
}
if(num)
{
q->next = NULL;
p->next = q;
p = q;
}else{
printf("----- 该学生信息已存在,请重新输入 -----\n");
n++;
system("pause");
}
}
printf("录入完毕!\n");
system("pause");
return head;
}
void Add_student(student *head)
{
system("cls");
while(1)
{
printf("---- 请输入将要增加的数量 ----\n");
student *p = (student *)malloc(sizeof(student));
p = head;
int n;
scanf("%d",&n);
for(int i=0;i学号(10) 姓名 性别 数学 英语 c语言\n");
printf("--->如 0000000000 张三 man 100 100 100\n");
printf("-------------------------------------------------------------\n");
printf("---->");
Check_student(q);
student *c = (student *)malloc(sizeof(student));
c = head->next;
int num = 1;
while(c)
{
if(strcmp(q->id,c->id)==0)
{
num = 0;
break;
}
c = c->next;
}
if(num)
{
q->next = head->next;
head->next = q;
}else{
printf("----- 该学生信息已存在,请重新输入 -----\n");
n++;
system("pause");
}
printf("---------- 录入完毕! ----------\n");
system("pause");
}
int m;
printf("----- 是否继续增加学生,若是,请输入1,若输入其他则返回主界面 -----\n");
scanf("%d",&m);
if(m!=1)
{
break;
}
}
}
void delete_student(student *head)
{
system("cls");
student *p = (student *)malloc(sizeof(student));
p = head;
student *q = (student *)malloc(sizeof(student));
printf("---- 请输入将要删除学生的学号 ----\n");
printf("0000000000(学号为十位数)\n");
char id[20];
scanf("%s",&id);
if(p==NULL)
{
printf("------ 此时没有学生信息,请重新输入 ------\n");
system("pause");
}else{
while(p->next!=NULL)
{
if(strcmp(p->next->id,id)==0)
{
q = p->next;
p->next = q->next;
free(q);
printf("----- 该学生的信息已被删除 -----\n");
system("pause");
return ;
}
p = p->next;
}
if(p->next==NULL)
{
printf("---- 没有查询到将要删除的学生信息 ----\n");
system("pause");
return ;
}
}
}
void Revise_student(student *head)
{
system("cls");
printf("---- 请输入将要修改的数量 ----\n");
student *p = (student *)malloc(sizeof(student));
p = head;
int n;
scanf("%d",&n);
for(int i=0;inext = NULL;
printf("---- 请输入将要修改学生的学号 ----\n");
printf("0000000000(学号为十位数)\n");
char id[20];
scanf("%s",&id);
system("cls");
if(p==NULL)
{
printf("------ 此时没有学生信息,请重新输入 ------\n");
system("pause");
}else{
while(p!=NULL)
{
if(strcmp(p->id,id)==0)
{
printf("----- 请输入修改后的学生的学生信息 -----\n");
printf("请按照如下格式书写\n---->学号(10) 姓名 性别 数学 英语 c语言\n");
printf("--->如 0000000000 张三 man 100 100 100\n");
printf("-------------------------------------------------------------\n");
printf("---->");
scanf("%s%s%s%f%f%f",&q->id,&q->name,&q->sexual,&q->grade_math,&q->grade_English,
&q->grade_c);
student *c = (student *)malloc(sizeof(student));
c = head->next;
int num = 1;
while(c)
{
if(strcmp(c->id,q->id)==0)
{
num = 0;
break;
}
c = c->next;
}
if(num==1)
{
if(strlen(q->id)==10&&(strcmp(q->sexual,"man")==0||strcmp(q->sexual,"woman")==0)&&
(q->grade_math>=0&&q->grade_math<=100)&&(q->grade_English>=0&&q->grade_English<=100)
&&(q->grade_c>=0&&q->grade_c<=100))
{
strcpy(p->id,q->id);
strcpy(p->name,q->name);
strcpy(p->sexual,q->sexual);
p->grade_math = q->grade_math;
p->grade_English = q->grade_English;
p->grade_c = q->grade_c;
printf("------ 该学生的信息已被修改! ------\n");
system("pause");
break;
}else{
printf("----- 数据输入错误,即将返回到主页面! -----\n");
system("pause");
break;
}
}else{
printf("----- 该学生信息已存在,即将返回到主页面! -----\n");
system("pause");
break;
}
}
p = p->next;
}
if(p==NULL)
{
printf("----- 没有找到该学生信息,按任意键返回主界面! -----\n");
system("pause");
break;
}
}
}
}
void All_student(student *head)
{
system("cls");
student *p=head;
printf("----所有的学生信息总结----\n");
printf(" \n");
printf("学号\t\t姓名\t性别\t数学\t英语\tc语言\t\n");
if(p==NULL)
{
printf("------ 此时没有学生信息,请重新输入 ------\n");
system("pause");
}else{
while(p->next!=NULL)
{
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t\n",
p->next->id,p->next->name,p->next->sexual,p->next->grade_math,p->next->grade_English,p->next->grade_c);
p=p->next;
}
}
printf("--------------------------------------------------------------\n");
printf(" 输出完毕 \n");
system("pause");
}
int sexual_census(student *head)
{
system("cls");
student *p = (student *)malloc(sizeof(student));
p = head;
int man = 0;
int woman = 0;
if(p==NULL)
{
printf("------ 此时没有学生信息,请重新输入 ------\n");
system("pause");
}else{
while(p->next!=NULL)
{
if(strcmp(p->next->sexual,"man")==0)
{
man++;
}else if(strcmp(p->next->sexual,"woman")==0)
{
woman++;
}
p = p->next;
}
}
printf("------ 统计结果为 ------\n");
printf("---- 男生的人数为:%d人\n",man);
printf("---- 女生的人数为:%d人\n",woman);
printf("--------------------------------------------------------------\n");
system("pause");
return 0;
}
void sorttotal_student(student *head)
{
system("cls");
int cou = 0;
int i,num;
student *tail = (student *)malloc(sizeof(student));
student *q = (student *)malloc(sizeof(student));
student *p = (student *)malloc(sizeof(student));
student *t = (student *)malloc(sizeof(student));
t = head;
if(t->next != NULL)
{
while(t->next != NULL)
{
cou++;
t = t->next;
}
for(i=0;inext;
p = q->next;
while(num--)
{
if(q->grade_cgrade_c)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
printf("-------- 排序成功,请返回主界面选择查看! --------\n");
system("pause");
}else
{
printf("-------- 此时没有学生信息,请录入! --------\n");
system("pause");
}
}
void bad_student(student *head)
{
system("cls");
student *p = (student *)malloc(sizeof(student));
p = head;
printf("----- 专业课不及格的学生如下 -----\n");
printf("学号\t\t姓名\t性别\t数学\t英语\tc语言\t\n");
if(p==NULL)
{
printf("------ 此时没有学生信息,请重新输入 ------\n");
system("pause");
}else{
while(p->next!= NULL)
{
if(p->next->grade_c<60)
{
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t\n",
p->next->id,p->next->name,p->next->sexual,p->next->grade_math,
p->next->grade_English,p->next->grade_c);
printf("--------------------------------------------------------------\n");
}
p = p->next;
}
}
system("pause");
}
void Save_student(student *head)
{
system("cls");
char filename[15];
printf("------ 请输入要建立的文件的名称: ------\n");
scanf("%s",filename);
FILE *fp;
fp = fopen(filename,"w");
if(fp==NULL)
{
printf("----- 打开文件失败! -----\n");
system("pause");
return ;
}
student *p = head->next;
while(p)
{
fprintf(fp,"学号\t\t\t姓名\t\t性别\t\t数学\t\t英语\t\tc语言\t\t\n");
fprintf(fp,"%s\t\t%s\t\t%s\t\t%.1f\t\t%.1f\t\t%.1f\t\t\n",&p->id,&p->name,
&p->sexual,&p->grade_math,&p->grade_English,&p->grade_c);
p = p->next;
}
printf("------- 学生数据保存成功! -------\n");
system("pause");
fclose(fp);
}
int main()
{
int x = 0;
while(1)
{
color(2);
char mima[20] = "nangongyouc";
char mima_1[20];
printf("------ 请输入密码(您还有%d次机会) ------\n",6-x);
printf("---->");
gets(mima_1);
if(strcmp(mima_1,mima)==0)
{
printf("------ 密码正确! ------\n");
printf(" \n");
printf("pause");
printf("--- 请按任意键进入学生管理系统! ---\n");
break;
}else if(strcmp(mima_1,mima)!=0&&x<5){
x++;
printf("----- 密码错误,请重新输出 -----\n");
system("pause");
system("cls");
}else if(strcmp(mima_1,mima)!=0&&x>=5)
{
printf("密码输入次数过多,已退出系统!");
return 0;
}
}
student *head = (student *)malloc(sizeof(student));
head->next = NULL;
int n;
while(1)
{
color(11);
menu();
scanf("%d",&n);
switch(n)
{
case 1:
color(6);
head = Creat_student();
break;
case 2:
color(11);
Add_student(head);
break;
case 3:
color(14);
delete_student(head);
break;
case 4:
color(9);
Revise_student(head);
break;
case 5:
color(12);
All_student(head);
break;
case 6:
color(13);
sexual_census(head);
break;
case 7:
color(10);
bad_student(head);
break;
case 8:
color(12);
sorttotal_student(head);
break;
case 9:
color(10);
Save_student(head);
break;
case 0:
printf("----- 欢迎下次使用 -----!");
return 0;
default:
printf("----- 请按系统提示进行操作 -----\n");
system("pause");
break;
}
}
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文标题:期末课设学生信息管理系统链表(有简单解释)-创新互联
新闻来源:http://scyanting.com/article/issjg.html