学生信息系统 链表 排序 学生系统 数据结构C程序
- 格式:docx
- 大小:162.18 KB
- 文档页数:27
C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
c语言程序设计学生学籍管理系统实验数据存储及数据流向C语言程序设计学生学籍管理系统实验数据存储及数据流向在学生学籍管理系统中,数据存储和数据流向是非常重要的。
系统需要存储学生的个人信息、课程成绩和学籍变动等数据,并根据这些数据做出相应的处理。
这篇文章将带你了解学生学籍管理系统中的数据存储和数据流向。
数据存储学生学籍管理系统中需要存储的数据包括学生的个人信息、课程成绩和学籍变动等数据。
这些数据可以存储在不同的位置,如磁盘、数据库等。
磁盘存储:磁盘存储是最常见的数据存储方式,数据以文件的形式存放在硬盘上。
学生学籍管理系统中的数据可以存储在一个或多个文件中,每个文件存储一个类型的数据。
例如,学生的个人信息可以存储在一个“学生信息.txt”文件中,课程成绩可以存储在一个“课程成绩.txt”文件中。
数据库存储:数据库是一种结构化的数据存储方式,可以有效地管理大量数据。
学生学籍管理系统中,可以使用关系型数据库存储学生信息、教师信息、课程信息、成绩信息等数据,方便管理和检索。
通过SQL语句可以对数据库中的数据进行增删改查等操作,实现数据的高效管理。
数据流向学生学籍管理系统中的数据流向主要包括数据采集、数据处理、数据展示等过程。
这些流程需要将数据从一个位置传输到另一个位置,以实现正确的处理和展示。
数据采集:数据采集是指将学生或其他相关信息采集到系统中的过程。
例如,学生信息可以通过录入学生信息表单实现,成绩信息可以通过录入成绩表单实现等。
数据采集需要保证数据的准确性和完整性,以保证数据的正确性。
数据处理:数据处理是指对采集到的数据进行各种处理操作的过程。
例如,对学生信息进行排序、筛选、查询等操作,对成绩信息进行计算平均分、制作成绩报表等操作。
数据处理需要对数据进行严格的逻辑检验,以保证数据的正确性。
数据展示:数据展示是指将处理后的数据以易于理解的形式展示给用户的过程。
例如,把学生信息、成绩信息等数据以列表或表格形式展示给用户,使用户能够清晰了解学生的学籍状况。
#include<stdio.h>#include <malloc.h>#include<string.h>#include<stdlib.h>#include <io.h>//建立结构体struct student{long num;//学号char name[10];//姓名char sex[10];//性别char id[20];//身份证号char adress[80];//家庭地址long tel; //电话号码struct student * next;};/*此学生信息管理系统一共分为八个模块,分别为信息录入、信息浏览、信息查询、信息删除、信息修改、信息插入、信息保存、信息读取,其中信息保存和信息读取为隐藏模块。
系统界面清晰,操作简单,用户输入密码之后就可进入进行各种操作。
*/FILE *fp;//文件指针int count=0;//记录学生数量struct student *head;//学生信息录入struct student *input(){struct student *head=NULL; //定义头指针struct student *p1,*p2; //定义结点while(1){int choice;printf(" |------------------| \n");printf(" | 【1】录入学生信息| \n");printf(" | 【0】退出| \n");printf(" |------------------| \n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){printf(" *****学生信息录入模块***** \n");p1=(struct student *)malloc(sizeof(struct student));//开辟一个新结点printf(" 请输入学号: ");scanf("%ld",&p1->num);printf(" 请输入姓名: ");scanf("%s",p1->name);printf(" 请输入性别:");scanf("%s",p1->sex);printf(" 请输入身份证号:");scanf("%s",&p1->id);printf(" 请输入家庭住址:");scanf("%s",p1->adress);printf(" 请输入手机号:");scanf("%ld",&p1->tel );count++;if(head==NULL){head=p1;}elsep2->next=p1;//p1指向下一个结点p2=p1;}else if(choice==0)break;elseprintf(" 选择错误!请重新选择!\n");}p1->next=NULL;return head;}//学生信息浏览void displayall(struct student *head){struct student *p1=head;if(head==NULL){printf("无学生信息!\n");return;}else{printf("总共有%d个学生!\n",count);printf(" 所有学生信息为:\n");printf("***************************************************************\n");while(p1!=NULL){printf("\n学号:%ld\n姓名:%s\n性别:%s\n身份证号:%s\n家庭住址:%s\n手机号:%ld\n\n", p1->num, p1->name,p1->sex,p1->id,p1->adress,p1->tel);p1=p1->next;}}}void display(struct student *p1){{printf(" 该学生信息为:\n");printf("***************************************************************\n");printf(" \n学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");printf("%ld\t%s\t%s\t%s\t\t%s\t\t%ld\n", p1->num,p1->name,p1->sex,p1->id,p1->adress,p1->tel); }}//查询学生信息struct student *query(struct student *head){ struct student *p1;int choice;int num;char name[10];if(head==NULL) {printf("链表为空或无学生记录!\n");return head;}while(1){printf(" |---------------|\n");printf(" |【1】按学号查询|\n");printf(" |【2】按姓名查询|\n");printf(" |【0】退出|\n");printf(" |---------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){printf(" 请输入要查询学生的学号:"); scanf("%ld", &num);p1=head;while(1){if(num == p1->num) {printf(" *****找到该学生信息*****\n"); display(p1);break;}if(p1->next==NULL){printf(" 没有学号为%d的学生信息!\n",num); break;}else p1=p1->next;}}else if(choice==2){printf(" 请输入要查询学生的姓名:"); scanf("%s", name);p1=head;if(strcmp(name, p1->name)==0){printf(" *****找到该学生信息*****\n");}else{while((strcmp(name, p1->name)!=0)&& p1->next!=NULL) { p1=p1->next;if(strcmp(name, p1->name)==0){printf(" *****找到该学生信息*****\n");display(p1);break;}elseprintf(" 没有姓名为%s的学生!\n",name);}}}else if(choice==0)break;elseprintf(" 选择错误!\n");}return (p1);} //删除学生信息struct student *del(struct student *head){struct student * p1, * p2;int num,choice;if(head==NULL){printf(" 链表为空或无学生记录!\n");return head;}printf(" 请输入要删除的学生学号:");scanf("%ld",&num);p1=head;while(1){if(num == p1->num) {printf(" ****找到该学生信息****\n");display(p1);break;}if(p1->next==NULL){printf(" 没有学号为%d的学生信息!\n",num);return head;}else{p2=p1;}}printf(" |-------------|\n");printf(" |【1】确认删除|\n");printf(" |【0】返回|\n");printf(" |-------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){count--;if(p1 == head)head=p1->next;elsep2->next=p1->next;free(p1);printf(" 该学生信息已删除!\n");}else if(choice==0)return head;elseprintf("无效选择,请重新输入!");return head;}//修改学生信息struct student *change(struct student *head){ struct student *p1,*p2;int choice;long num;int flog;if(head==NULL){printf(" 链表为空或无学生记录!\n"); return head;}printf(" 请输入要修改的学生的学号:"); scanf("%ld",&num);p1=head;while(1){if(num == p1->num) {flog=1;break;}if(p1->next==NULL){flog=0;break;}else{p2=p1;p1=p1->next;}}if(flog==0){printf(" 没有学号为%d的学生信息!\n",num); }else if(flog==1){printf(" ****找到该学生信息****\n"); display(p1);while(1){printf(" |**********************|\n");printf(" |【1】修改姓名|\n");printf(" |【2】修改性别|\n");printf(" |【3】修改身份证号|\n");printf(" |【4】修改家庭住址|\n");printf(" |【5】修改电话号码|\n");printf(" |【0】退出|\n");printf(" |**********************|\n");printf(" 请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:{printf(" 请输入修改后的姓名:");scanf("%s",p1->name);break;}case 2:{printf(" 请输入修改后的性别:");scanf("%s",p1->sex);break;}case 3:{printf(" 请输入修改后的身份证号:"); scanf("%s",&p1->id);break;}case 4:{printf(" 请输入修改后的家庭住址:"); scanf("%s",p1->adress);break;}case 5:{printf(" 请输入修改后的电话号码:");scanf("%ld",&p1->tel);break;}case 0:return head;default:printf(" 无效选择,请重新输入!\n");}}}return head;}//插入一个学生信息struct student *insert(struct student *head){struct student *p1,*p2,*insertstu;int place,choice,mark=0,num=0;if(head==NULL){printf(" 信息为空请选择信息录入!\n");return head;}while(1){printf(" |-------------|\n");printf(" |【1】继续|\n");printf(" |【0】退出|\n");printf(" |-------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){insertstu=(struct student *)malloc(sizeof(struct student));displayall(head);printf(" 请输入要插入的位置:");scanf("%d",&place);if(place==1){mark=1;insertstu->next=head;head=insertstu;}else{for(p2=p1=head,num=1;p1->next !=NULL;p2=p1,p1=p1->next,num++){ if(num==place){mark=1;insertstu->next=p1;p2->next=insertstu;break;}}if(place==num){mark=1;insertstu->next=p1;p2->next=insertstu;}else if(place==num+1){mark=1;p1->next=insertstu;insertstu->next=NULL;}else if(place>num+1){printf(" 超出插入范围,请核对!\n"); continue;}}if(mark==1){printf(" 请输入要插入的学生信息!\n"); printf(" 请输入学号:");scanf("%ld",&insertstu->num);printf(" 请输入姓名:");scanf("%s",insertstu->name);printf(" 请输入性别:");scanf("%s",insertstu->sex);printf(" 请输入身份证号:");scanf("%s",&insertstu->id);printf(" 请输入家庭住址:");scanf("%s",insertstu->adress);printf(" 请输入手机号:");scanf("%ld",&insertstu->tel );count++;display(insertstu);}}else if(choice==0)break;elseprintf("无效选择,请重新输入!\n");}return head;}//学生信息保存int SaveStudent(struct student *head){struct student *p1;p1=head;if((fp=fopen("student.txt","w+"))==NULL){printf("文件打开失败!\n");exit(0);}fprintf(fp,"%d\n",count);fprintf(fp,"学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");while(p1!=NULL){fprintf(fp,"%ld\t%s\t%s\t%s\t\t%s\t\t%ld\n", p1->num, p1->name,p1->sex,p1->id,p1->adress,p1->tel);p1=p1->next;}return 1;fclose(fp);}void freeAll(struct student *head){struct student *p1, *p2;p1=p2=head;while(p1){p2=p1->next;free(p1);p1=p2;}}struct student *LoadStudent(){struct student *head;struct student *p1, *p2;fp = fopen("student.txt", "r+");if (!fp){printf("文件打开错误!\n");exit(0);}fscanf(fp,"%d\n", &count);fscanf(fp, "学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");head=p1=p2=(struct student *)malloc(sizeof(struct student));fscanf(fp,"%ld%s%s%s%s%ld\n", &p1->num, p1->name,p1->sex,&p1->id,p1->adress,&p1->tel); while(!feof(fp)){p1=(struct student *)malloc(sizeof(struct student));fscanf(fp,"%ld%s%s%s%s%ld\n", &p1->num, p1->name,p1->sex,&p1->id,p1->adress,&p1->tel); p2->next=p1;p2=p1;}p2->next = NULL;fclose(fp);return head;}//主菜单void menu(struct student *head){int n;while(1){int choice;printf(" |*****学生信息系统*****|\n");printf(" |**********************|\n");printf(" |【1】录入学生信息|\n");printf(" |【2】浏览学生信息|\n");printf(" |【3】查询学生信息|\n");printf(" |【4】删除学生信息|\n");printf(" |【5】修改学生信息|\n");printf(" |【6】插入学生信息|\n");printf(" |【0】退出系统|\n");printf(" |**********************|\n");printf(" 请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:{if(head==NULL){head=input();}else{head=insert(head);}break;}case 2:{displayall(head);break;}case 3:{query(head);break;}head=del(head);break;}case 5:{change(head);break;}case 6:{head=insert(head);break;}case 0:{n=SaveStudent(head);freeAll(head);printf("信息已成功保存!\n");return;}default:printf("无效选项,请重新输入!\n");}}}//欢迎界面void welcome(){int choice;printf(" ************************\n"); printf(" * *\n");printf(" * 欢迎使用学生信息系统*\n"); printf(" * *\n");printf(" ************************\n"); printf(" * *\n");printf(" ************************\n"); printf(" |【1】继续|\n");printf(" |【0】退出|\n");printf(" |------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);system("cls");if(choice==1){if((fp=fopen("student.txt","r+"))==NULL){ menu(head);}head=LoadStudent();menu(head);}}else{return;}}//程序入口void main(){char userName[9];char userPWD[7];int i;for(i=0;i<3;i++){printf("\n\n\n\n\n\n\n");printf("\n请输入您的用户名:");scanf("%s", userName);printf("\n请输入您的密码:");scanf("%s", userPWD);if ((strcmp(userName,"123")==0) && (strcmp(userPWD,"123")==0)){ printf("用户名和密码输入正确!\n");system("cls");//用户名和密码正确,显示欢迎菜单welcome();break;}else{if(i<2){system("cls");//用户名或密码错误,提示用户重新输入printf("用户名或密码错误,请重新输入!");}else{system("cls");//连续3次输错用户名或密码,退出系统。
学生管理系统c语言简单版学生管理系统c语言简单版介绍:学生管理系统是一种用于管理学生信息的软件,它可以方便地对学生的基本信息、课程成绩等进行录入、查询、修改和删除等操作。
本文将介绍如何使用C语言编写一个简单的学生管理系统。
功能:1. 添加学生信息2. 查询学生信息3. 修改学生信息4. 删除学生信息5. 显示所有学生信息实现方法:1. 添加学生信息添加学生信息需要输入以下内容:姓名、性别、年龄、班级和电话号码。
我们可以定义一个结构体来存储这些信息,代码如下:```struct Student {char name[20];char sex[10];int age;char class[20];char phone[20];};```然后定义一个数组来存储多个学生的信息:```struct Student students[100];int count = 0; // 学生数量```接下来,我们可以编写一个函数来添加新的学生信息:```void addStudent() {struct Student student;printf("请输入姓名:");scanf("%s", );printf("请输入性别:");scanf("%s", student.sex);printf("请输入年龄:");scanf("%d", &student.age);printf("请输入班级:");scanf("%s", student.class);printf("请输入电话号码:");scanf("%s", student.phone);students[count++] = student; // 将新的学生信息存储到数组中 printf("添加成功!\n");}```2. 查询学生信息查询学生信息可以按照姓名或电话号码进行查询。
用C语言实现线性表的基本操作,能创建一个基于学生信息管理的链表,至少包含数据输入、数据输出、数据处理等操作。
在主函数里能实现以下功能。
运行后出现一个选择提示。
可选择的功能有1)创建新的学生信息链表2)增加一个新的学生信息3)按学号删除某个学生信息4)按学号查找某个学生信息5)可以按照学生成绩对链表排序6)退出系统#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"jiemian();struct student{char name[50];char sex[5];int age;char num[50];float score1;float score2;float score3;float sum;float ave;}stu[50],del;void gn1(){int i=0;char num1;for(i=0;i<50;i++){printf("请输入要添加的学生资料:\n");printf("学号:");scanf("%s",stu[i].num);printf("姓名:");scanf("%s",stu[i].name);printf("性别:");scanf("%s",&stu[i].sex);printf("年龄:");scanf("%d",&stu[i].age);printf("请输入学生的三门成绩:\n");printf("语文:");scanf("%f",&stu[i].score1);printf("数学:");scanf("%f",&stu[i].score2);printf("英语:");scanf("%f",&stu[i].score3);printf("是否继续添加:y/n\n");scanf("%c",&num1);scanf("%c",&num1);if(num1=='N' || num1=='n'){system("cls");jiemian();}}}void gn2(){int i;char num[50];printf("请输入要查找的学生学号:\n");scanf("%s",num);for(i=0;i<50;i++)if(strcmp(stu[i].num,num)==0){stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;stu[i].ave=stu[i].sum/3;printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i] .age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);break;}if(i==50)printf("查找不到!请重新输入!\n");getch();system("cls");jiemian();}void gn3(){char num1,i=0;printf("请输入要修改的学生学号:\n");scanf("%s",stu[i].num);printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i] .age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);printf("姓名:");scanf("%s",stu[i].name);printf("性别:");scanf("%s",stu[i].sex);printf("年龄:");scanf("%d",&stu[i].age);printf("请输入学生的三门成绩:\n");printf("语文:");scanf("%f",&stu[i].score1);printf("数学:");scanf("%f",&stu[i].score2);printf("英语:");scanf("%f",&stu[i].score3);printf("是否继续修改:y/n?\n");scanf("%c",&num1);scanf("%c",&num1);if(num1=='N' || num1=='n')system("cls");jiemian();}void gn4(){int i;char num[50];printf("请输入要删除的学生学号:\n");scanf("%s",num);for(i=0;i<50;i++)if(strcmp(num,stu[i].num)==0){printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i] .age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);stu[i]=del;printf("信息已删除,按任意键返回..\n");break;}if(i==50)printf("您输入的信息不存在!\n");getch();system("cls");jiemian();}void gn5(){int i=0;stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;stu[i].ave=stu[i].sum/3;printf("学号\t姓名\t性别\t年龄\t语文\t数学\t英语\t总成绩\t 平均成绩\n"); for(i=0;i<50;i++){if(stu[i].age==0)break;printf("%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n",stu[i].num,stu[i].name,stu[i].sex,stu[i] .age,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].ave);}printf("按任意键返回...");getch();system("cls");jiemian();}void gn6(){FILE *fp;int i;char filename[50];printf("\n");printf("\n");printf("请输入要保存的文件名:");scanf("%s",filename);if((fp=fopen(filename,"wb"))==NULL)printf("文件名为空,不能保存!\n");for(i=0;i<50;i++){if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf("文件保存失败!\n");}fclose(fp);printf("文件已保存!\n");printf("按任意键返回...\n");getch();system("cls");jiemian();}void gn7(){FILE *fp;int i=0; //打开文件流char filename[50];printf("请输入文件名:");scanf("%s",filename); //输入要载入的文件名if((fp=fopen(filename,"rb"))==0) //如果当前目录下不存在相对应的文件,输出文件不存在,退出系统。
#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。
h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。
学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。
该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明该系统所需要的功能有:1、链表的建立;2、学生信息的插入;3、学生信息的查询;4、学生信息的输出;5、学生信息的修改;6、学生信息的删除;7、良好的欢迎选择界面。
三、总体方案设计一、实现任务的方法1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除,都是使用链表的相关知识;3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义了一个achieve 结构体;二、总体结构三、模块划分(1)链表的建立。
(2)对链表信息的插入。
(3)对链表信息的查找。
(4)对链表信息的输出。
(5)对链表信息的删除。
(6)对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中。
三、数据结构说明一、自定义的数据结构:1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。
2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
3、结点结构-Nodetype,定义了数据域inform和指针域next;二、类Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
四、各模块设计说明一、建立:首先:建立一个空链表:Student::Student(){head=new Nodetype;head->next=NULL; 表明这是一个空链表cout<<"请建立链表\n";}然后建立链表:二、添加:按照学号从小到大的顺序插入:三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
以下内容是本人将近一个星期的劳动成果;C语言程序设计,作为本学期最后一次实训。
设计内容:学生信息查询系统可实现:1录入学生信息2显示学生成绩3修改学生成绩4删除学生成绩5按学号查询学生信息6按学好显示学生信息7按总成绩递减输出学生信息其中学生的信息包括:学生总人数,学号,姓名,性别,英语,数学,C语言三科单科成绩及总成绩以下为源程序内容:#include <stdio.h>#include <string.h>//strcpy()#include<process.h>//system(),exit()#include <conio.h>//getch()#define M 100/*全局变量*/int num=-1;/*学生数,从STU[0]开始记录学生信息*/struct studen{long id;/*学号*/char name[8];/*姓名*/char sex[2];/*性别*/intmath;/*数学*/intenglish;/*英语*/intc_program;/*C语言*/inttotal;/*总分*/}STU[M];/*函数声明*/voidpage_title();//显示主菜单void student_new();//输入学生信息void student_del();//删除学生信息void student_edit();//修改学生信息void score_search();//按学号查询成绩void score_sort();//按成绩排序void id_sort();//按学号排序void show();//显示学生记录//void save();//void display();void left();void page_head1();/*打印表头1*/void page_head2();/*打印表头2*/intfind(long);/*按学号查找学生*/voidshow_one(int);/*显示一条记录*/void input_one(int);/*输入一个新学生的信息*/void count(int);/*计算一个新学生的总分*/void in_menu();/*按任意键进入主菜单*//*主函数*/void main(){//display();while(1){ page_title();}}/*主菜单*/void page_title(){char c;system("cls");/*清屏*/printf("\n\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>学生成绩管理系统<<<<<<<<<<<<<<<<<<<<\n\n");printf("\t\t\t\t1录入学生成绩记录\n\n");printf("\t\t\t\t2显示学生成绩记录\n\n");printf("\t\t\t\t3修改学生成绩记录\n\n");printf("\t\t\t\t4删除学生成绩记录\n\n");printf("\t\t\t\t5按学号查询学生记录\n\n");printf("\t\t\t\t6按学号显示学生记录\n\n");printf("\t\t\t\t7按总成绩递减输出\n\n");printf("\t\t\t\t8保存\n\n");printf("\t\t\t\t0退出\n\n");printf("********************************************************** ****************\n");printf("请用数字键0-8选择操作:\n");/*填充程序,完成主菜单显示*/c=getchar();system("cls");switch(c){case'1':student_new();break;case'2':show();break;case'3':student_edit();break;case'4':student_del();break;case'5':score_search();break;case'6':id_sort();break;case'7':score_sort();break;//case'8':save();break;case'0':left();}}/*录入学生基本信息*/void student_new(){int i,n;printf("请输入学生的个数(1-%d)",M);scanf("%d",&n);while(!(n>0 && n<=M)){printf("\n输入的学生人数太多,请重新输入学生人数:");scanf ("%d",&n);}page_head1();while(n--){num++;input_one(num);count(num);}}/*删除学生基本信息*/voidstudent_del(){long id;char c;int n;while(1){printf("请输入你要删除学生的学号:");scanf("%ld",&id);printf("\n");n=find(id);if(n!=-1)break;elsesystem("cls");}page_head2();show_one(n);printf("\n请确认删除吗?请输入Y或者N");c=getch();if('Y'==c || 'y'==c){STU[n]=STU[num];num--;}}/*按学号查找学生*/int find(long id){int n;for(n=0;n<=num;n++)if(STU[n].id==id) return n;return -1;}/*输入一个新学生的信息*/void input_one(intn){scanf("%ld%s%s%d%d%d",&STU[n].id,STU[n].name,STU[n].sex,&STU[n].math,&STU[n].english,&STU[n].c_program);printf("---------------------------------------------------------------------\n");}/*显示所有记录*/void show(){inti,j;page_head2();for(i=0;i<num+1;i++){//if(-1==n)//j=num-i;//else//j=i;show_one(i);}in_menu();}/*显示一条记录*/void show_one(intn){if(strlen(STU[n].name)>=10){printf("%ld\t\t%s\t\t%s\t\t",STU[n].id,STU[n].name,S TU[n].sex);}else{printf("%ld\t\t%s\t\t%s\t",STU[n].id,STU[n].name,STU[n].sex);}printf ("%3d\t%3d\t%3d\t%3d\t\n",STU[n].math,STU[n].english,STU[n].c_program,STU[n].t otal);printf("----------------------------------------------------------------------\n");}/*计算一个新学生的总分*/void count(intn){STU[n].total=STU[n].english+STU[n].math+STU[n].c_program;}/*退出*/voidleft(){exit(0);}/*修改信息*/void student_edit(){long id;int n;while(1){printf("请输入你要修改学生的学号:");scanf("%ld",&id);printf("\n");n=find(id);if(n!=-1)break;elsesystem("cls");}page_head2();show_one(n);printf("\n请输入新的信息:\n");page_head1();scanf("%ld%s%s%d%d%d",&STU[n].id,STU[n].name,STU[n].se x,&STU[n].math,&STU[n].english,&STU[n].c_program);count(n);}/*进入主菜单*/void in_menu(){printf("\n请按任意键进入主菜单");getch();}/*按学号查询成绩*/void score_search(){long id;int n;printf("请输入你要修改学生的学号:");scanf("%ld",&id);printf("\n");n=find(id);if(n!=-1){page_head2();show_one(n);}elseprintf("不存在该学号学生信息!!");in_menu();}/*按学号排序显示*/void id_sort(){int i=0;int n;longmin=STU[0].id;for(i=1;i<=num;i++){if(STU[i].id<min)min=STU[i].id;}page_head2();for(i=0;i<=num;){n=find(min++);if(n!=-1){i++;show_one(n);}}in_menu();}/*按总成绩冒泡降序显示*/voidscore_sort(){struct student t;int i,j;system("cls");for(i=0;i<num;i++){for(j=0;j<num-i;j++){if(STU[j].total<STU[j+1].total){t=STU[j];STU[j]=STU[j+1];STU[j+1]=t;}}}show();}/*打印表头2*/voidpage_head2(){printf("**************************************************** ******************\n");printf("学号\t\t姓名\t\t性别\t数学\t英语\tC语言\t总成绩\n");printf("**********************************************************************\n");}/*打印表头1*/voidpage_head1(){printf("**************************************************** **********\n");printf("学号\t\t姓名\t\t性别\t数学\t英语\tC语言\n");printf("************************************************************ **\n");}。
实验报告一、问题陈述及其需求分析(一)问题陈述学生信息管理系统是对学生信息的基本管理,其中包括以下及模块:(1)增加一个学生的信息(需输入要增加学生的所有信息);(2)统计本班学生总人数及男女生人数。
(3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。
(4)按学号对所有学生信息排序,并输出结果;(5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。
(二)功能需求分析学生信息管理系统设计学生信息包括:学号,姓名,性别,出生年月,电话使之提供以下功能:1、系统以菜单方式工作2、建立链表并显示3、插入新的学生信息4、删除某学号的学生信息5、查找某学号的学生信息6、对学生信息排序7、统计学生人数8、输出学生信息二总体设计(一)模块依据程序的数据结构,描述该程序的层次结构,如下图:1、建立链表并显示voidcreatelist(structstucode**r);2、插入新的学生信息voidinsert(structstucode**r);3、删除某学号的学生信息voiddel(structstucode**r);4、查找某学号的学生信息voidsearch1(structstucode*r);5、对学生信息排序voidsort(structstucode**r);6、统计学生人数voidsearch2(structstucode*r);7、输出学生信息voidout(structstucode*r);(二)程序总体框架模块层次结构,只确定了模块之间的关系和函数原型,不是程序的执行步骤。
程序总体框架是该程序的总体流程图。
改程序不是顺序连续地执行全部功能,而是在某一时刻有选择地执行一种或多种功能。
因此选用菜单方式是较佳的方案,程序总体框架如下图:(三)运行环境(软,硬件环境)硬件:CPU,内存,主板,硬盘,显卡,键盘,显示器等等。
软件:WindowsXPtruboc应用软件。
学生信息管理系统c语言版源代码#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #define N 1000typedef struct student {int number;char name[20];int grade;int gaoshu;int yingyu;int jisuanji;int sum;}STUDENT;STUDENT student[N]; int shuliang=0;void menu();void fhzjm(){char biaozhi[20];printf("\n");printf("还需要操作么,如果需要操作请输入:yes,否则请输入:no\n");scanf("%s",biaozhi);if(strcmp(biaozhi,"yes")==0){menu();}else if(strcmp(biaozhi,"no")==0)exit(0);else{printf("请输入正确的字符,谢谢~\n"); fhzjm();}}void DengJi(){int rs;int i,k=1;system("CLS");printf("请输入需要输入几个学生信息:"); scanf("%d",&rs);for(i=shuliang;i<shuliang+rs;i++,k++) {printf("请输入第%d个学生的学号:",k); scanf("%d",&student[i].number);printf("请输入学生的姓名:");scanf("%s",student[i].name);printf("请输入学生3门课的成绩:"); printf("请输入第1门课的成绩:");scanf("%d",&student[i].gaoshu);printf("请输入第2门课的成绩:");scanf("%d",&student[i].yingyu);printf("请输入第3门课的成绩:");scanf("%d",&student[i].jisuanji);}shuliang=shuliang+rs;fhzjm();}void ShanChu(){char shanchuinfo[10];system("CLS");printf("删除全部学生信息请输入\"all\",删除指定学号的学生信息请输入\"one\"\n");scanf("%s",shanchuinfo);if(strcmp(shanchuinfo,"all")==0){int j;printf("你删除的学生信息如下:\n");printf("-----------学号-------------姓名-------------高数--------------英语--------------计算机\t\n");for(j=0;j<shuliang;j++)printf("----%d-------%s-------%d-------%d-------%d\t\n",student[j].number,student[j].name,student[j].gaoshu,student[j].jisuanji);shuliang=0;printf("删除成功\n\n");}else if(strcmp(shanchuinfo,"one")==0){struct student *p=NULL;int choice;int i,j,k=0;printf("请输入你要删除的人的学号:");scanf("%d",&choice);for(i=0;i<shuliang;i++){if(choice==student[i].number){k=1;j=i;break;}}if(k){if(shuliang==1){p=&student[0];free(p);shuliang=0;}else{for(i=j;i<shuliang;i++) {student[i]=student[i+1];}shuliang=shuliang-1;}printf("删除成功\n\n");}else{printf("输入数据错误~\n"); }}fhzjm();}void LiuLan(){int i;system("CLS");if(shuliang==0){printf("系统里面没有任何学生的信息~\n");}else{for(i=0;i<shuliang;i++){printf("第%d个学生的学号为:%d\n",i+1,student[i].number);printf("第%d个学生的姓名为:%s\n",i+1,student[i].name);printf("第%d个学生的第一门课的成绩为:%d\n",i+1,student[i].gaoshu);printf("第%d个学生的第二门课的成绩为:%d\n",i+1,student[i].yingyu);printf("第%d个学生的第三门课的成绩为:%d\n",i+1,student[i].jisuanji);student[i].sum=student[i].gaoshu+student[i].yingyu+student[i].jisuan ji;printf("第%d个学生的总成绩为:%d\n",i+1,student[i].sum);}}fhzjm();}void ChaZhao(){int xx;char choice,yy[20];int i,j,k=0;system("CLS");if(shuliang==0){printf("系统里面没有任何学生的信息~\n");fhzjm();}printf("三种查找方式:学号,姓名,成绩\n");printf("如果按学号查找请输1,如果按姓名查找请输2,如果按成绩查找请输3\n");printf("请输入您查找的方式:");scanf("%s",&choice);if(choice=='1'){printf("请输入需要查找学生的学号:");scanf("%d",&xx);printf("您所查找的学生的信息为:\n");printf("----学号----姓名----高数成绩----英语成绩----计算机成绩----\t\n");for(i=0;i<shuliang;i++){if(xx==student[i].number){j=i;k=1;printf("----%d-------%s-------%d-------%d-------%d----\t\n",student[j].number,student[j].name,student[j].gaoshu,student[j].yingyu,student[i].jis uanji);}}if(k==0)printf("输入信息有误:\n");}else if(choice=='2'){printf("请输入需要查找学生的姓名:\n");scanf("%s",yy);printf("您所查找的学生的信息为:\n");printf("----学号----姓名----高数成绩----英语成绩----计算机成绩----\t\n");for(i=0;i<shuliang;i++){if(strcmp(yy,student[i].name)==0){j=i;k=1;printf("----%d-------%s-------%d-------%d-------%d----\t\n",student[j].number,student[j].name,student[j].gaoshu,student[j].yingyu,student[j].jis uanji);}}if(k==0)printf("输入信息有误:\n");}else if(choice=='3'){printf("请输入需要查找学生的成绩:\n");scanf("%d",&xx);printf("您所查找的学生的信息为:\n");printf("----学号----姓名----高数----英语----计算机----\t\n");for(i=0;i<shuliang;i++){if(xx==student[i].grade){j=i;k=1;printf("----%d-------%s-------%d-------%d-------%d----\t\n",student[j].number,student[j].name,student[j].gaoshu,student[j].yingyu,student[i].jis uanji);}}if(k==0)printf("输入信息有误:\n");}fhzjm();}void PaiXu(){struct student *p1[N],**p2,*temp;int i,j;system("CLS");p2=p1;for( i=0;i<shuliang;i++){p1[i]=student+i;}for( i=0;i<shuliang;i++){for( j=i+1;j<shuliang;j++){if((*(p2+i))->sum<(*(p2+j))->sum){temp=*(p2+i);*(p2+i)=*(p2+j);*(p2+j)=temp;} }}printf("按照总成绩排序之后的信息为:\n");printf("----学号----姓名----总成绩----\t\n");for( i=0;i<shuliang;i++){student[i].sum=student[i].gaoshu+student[i].yingyu+student[i].jisuan ji;printf("----%d-----%s----%d-----\n",(*(p2+i))->number,(*(p2+i))->name,(*(p2+i))->sum);}fhzjm();}void CunChu(){int i;FILE *rs;if((rs=fopen("student.txt","w"))==NULL){printf("not open");exit(0);}for(i=0;i<shuliang;i++){fwrite(&student[i], sizeof(student[i]), 1, rs); }if(ferror(rs)){fclose(rs);perror("写文件失败~\n");return;}printf("存储文件成功~\n");fclose(rs);fhzjm();}void DaoChu(){struct student t;int i=0;FILE* fp = fopen("student.txt", "r");shuliang=0;if(NULL==fp){perror("读取文件打开失败~\n");return;}memset(student,0x0,sizeof(student));while(1){fread(&t,sizeof(t),1,fp);if(ferror(fp)){fclose(fp);perror("读文件过程失败~\n");return;}if(feof(fp)){break;}student[i]=t;i++;}fclose(fp);shuliang=i; printf("导出文件成功~\n"); fhzjm();}void menu(){int n=0;system("CLS");printf(" 学生信息管理系统\n");printf(" 作者:陈椿\n");printf("-------------------MENU-----------------\n"); printf(" 1.登记学生信息\n");printf(" 2.删除学生信息\n");printf(" 3.浏览所有已经登记的学生\n");printf(" 4.查找\n");printf(" 4.1按学号查找\n");printf(" 4.2按姓名查找\n");printf(" 4.3按成绩查找\n");printf(" 5.根据总成绩排序\n");printf(" 6.存储到文件\n");printf(" 7.从文件导出\n");printf(" 8.退出系统\n");a: printf(" 请选择:");scanf("%d",&n);switch (n){case 1:DengJi();break;case 2:ShanChu();break;case 3:LiuLan();break;case 4:ChaZhao();break;case 5:PaiXu();break;case 6:CunChu();break;case 7:DaoChu();break;case 8:exit(0);break;default:{printf("请输入1-8之间的数字,谢谢~\n"); goto a;}}}main() {menu();}。
内蒙古工业大学信息工程学院实验报告课程名称:数据结构(C语言版)实验名称:线性表的创建与访问算法设计实验类型:验证性□ 综合性□ 设计性□实验室名班级:学号:姓名:组别:同组人:成绩:实验日期: 2011年5月16日预习报告成绩:指导教师审核(签名): 2011年 5月16日预习报告(一)实验目的数据结构于算法实验是计算机类本科学生计算机软件知识重要的实验环节,它将使学生从实践上学会用高级语言程序设计、实现复杂的数据结构,为大型软件设计奠定基础。
本实验以某种线性表的创建与访问算法设计作为实验内容,举一反三,全面、深刻掌握线性结构的实现方法,培养解决问题的能力。
(二)实验内容1、编写生成线性表的函数,线性表的元素从键盘输入;2、编写在线性表中插入元素的函数;3、编写在线性表中删除元素的函数;4、编写输出线性表的函数;5、编写主函数,调用以上各函数,以便能观察出原线性表以及作了插入或删除后线性表的屏幕输出。
(三)实验要求1、掌握线性结构的机器内表示;2、掌握线性结构之上的算法设计与实现;3、列表对比分析两种数据结构的相应操作的时间复杂度、空间复杂度,阐明产生差异的原因。
(四)问题描述有一班学生上体育课排队,构成了一个单链表,链表的结点存储了学生的学号、姓名。
(五)基本要求(1)从键盘输入学生的信息,建立学生链表。
(2)从键盘输入学生的信息,实现学生查询操作。
(3)从键盘输入学生的学号值,将学号为x的学生与其右边的学生进行交换。
(注:不允许将链表中数据域的值进行交换)(六)实验设计思路实验实现9个功能,先在主函数m a i n()设计声明每个函数,然后依次对每个函数细化,逐步调试,直到达到该函数的预期功能,即采用自顶向下,逐步细化的设计思路。
该实验全部采用单链表,设计一个学生信息系统,通过该系统一次可以完成:1.创建学生系统 2.学生系统排序 3.删除学生信息 4.增加学生信息 5.查找学生信息 6.清除学生信息7.修改学生信息8.模式查找信息9.退出学生系统等功能。
实验报告成绩:指导教师审核(签名): 2011年 5月16日(一)部分算法流程图1删除学生信息2学生信息模式查找3选择排序(二)函数算法函数算法具体见程序代码。
(三)调试程序出现的问题及解决的方法编程中出现很多的编译错误,我主要采用对每个函数调试,设断点,不会的问同学,链表的选择排序,在网上搜索,运用自己的程序中,让我更好的掌握了选择排序法。
(四)实验心得体会通过这次试验,让我更好的掌握了链表的使用,用链表解决实际问题,用模块化程序设计思路,对每个函数细化,调试,使得整个程序正确运行,达到预期结果。
(五)程序清单//学生系统.c p p:定义控制台应用程序的入口点。
//#i n c l u d e<s t d l i b.h>#i n c l u d e<s t d i o.h>#i n c l u d e<s t r i n g.h>#d e f i n e l e n20#d e f i n e N U L L0s t r u c t s t u d e n t{c h a r n a m e[l e n];c h a r n u m b e r[l e n];};s t r u c t s t d n o d e{s t u d e n t d a t a;s t d n o d e*n e x t;};v o i d c r e a t e s t d(s t d n o d e*s t d)//创建学生系统{i n t i=0;c h a r c h;d o{s t d->n e x t=(s t d n o d e*)m a l l o c(s i z e o f(s t d n o d e));s t d=s t d->n e x t;p r i n t f("\t输入学生的学号和姓名:\n\t");s c a n f("%s",&s t d->d a t a.n u m b e r);p r i n t f("\t");s c a n f("%s",&s t d->d a t a.n a m e);g e t c h a r();p r i n t f("\t继续创建学生信息吗?Y.继续N.退出\n\t");s c a n f("%c",&c h);}w h i l e(c h=='Y');s t d->n e x t=N U L L;}v o i d i n p u t s t d(s t d n o d e*s t d){s t d n o d e*p;p=s t d->n e x t;i f(p==N U L L)p r i n t f("\t没有学生信息!\n");p r i n t f("\t现有学生信息如下表:\n");i f(p!=N U L L)p r i n t f("\t╔═════╤══════╗\n");w h i l e(p!=N U L L){p r i n t f("\t║%10s│%11s║\n",p->d a t a.n u m b e r,p->d a t a.n a m e);p=p->n e x t;i f(p!=N U L L)p r i n t f("\t╟─────┼──────╢\n");}i f(s t d->n e x t!=N U L L)p r i n t f("\t╚═════╧══════╝\n");p r i n t f("\n");}v o i d s o r t s t d(s t d n o d e*s t d)//学生系统排序{c h a r c h;s t d n o d e*p i,*p j,*p i p r e,*p j p r e,*p t e m,*p m i n,*p m i n p r e;p r i n t f("\t选择排序方式: A.姓名 B.学号\n\t");//按升序排列用选择排序法g e t c h a r();s c a n f("%c",&c h);i f(s t d->n e x t==N U L L){p r i n t f("\t没有学生信息!\n");e x i t(0);}i f(c h=='A'){p i p r e=s t d;f o r(p i=s t d->n e x t;p i->n e x t!=N U L L;p i=p i->n e x t){p m i n=p i;f o r(p j=p i->n e x t,p m i n p r e=p i;p j!=N U L L;p m i n p r e=p m i n p r e->n e x t,p j=p j->n e x t){i f(s t r c m p(p m i n->d a t a.n a m e,p j->d a t a.n a m e)>0){p m i n=p j;p j p r e=p m i n p r e;}}i f(p m i n->n e x t==N U L L){p i p r e->n e x t=p m i n;p m i n->n e x t=p i->n e x t;p j p r e->n e x t=p i;p i->n e x t=N U L L;}e l s ei f(p m i n!=p i){p i p r e->n e x t=p m i n;p j p r e->n e x t=p i;p t e m=p m i n->n e x t;p m i n->n e x t=p i->n e x t;p i->n e x t=p t e m;}p i=p i p r e->n e x t;p i p r e=p i p r e->n e x t;}}i f(c h=='B'){p i p r e=s t d;f o r(p i=s t d->n e x t;p i->n e x t!=N U L L;p i=p i->n e x t){p m i n=p i;f o r(p j=p i->n e x t,p m i n p r e=p i;p j!=N U L L;p m i n p r e=p m i n p r e->n e x t,p j=p j->n e x t){i f(s t r c m p(p m i n->d a t a.n u m b e r,p j->d a t a.n u m b e r)>0){p m i n=p j;p j p r e=p m i n p r e;}}i f(p m i n->n e x t==N U L L){p i p r e->n e x t=p m i n;p m i n->n e x t=p i->n e x t;p j p r e->n e x t=p i;p i->n e x t=N U L L;}e l s ei f(p m i n!=p i){p i p r e->n e x t=p m i n;p j p r e->n e x t=p i;p t e m=p m i n->n e x t;p m i n->n e x t=p i->n e x t;p i->n e x t=p t e m;}p i=p i p r e->n e x t;p i p r e=p i p r e->n e x t;}}}v o i d d e l e t e s t d(s t d n o d e*s t d)//删除学生信息{s t d n o d e*p,*p r e=s t d;i n t f l a g=1;c h a r c h,c h o i c e[l e n];p=s t d->n e x t;p r i n t f("\t选择删除方式:A:姓名B:学号\n\t");g e t c h a r();s c a n f("%c",&c h);i f(c h=='A'){p r i n t f("\t输入删除学生的姓名:\n\t");s c a n f("%s",c h o i c e);i f(p==N U L L)p r i n t f("\t没有学生信息!\n");w h i l e(p!=N U L L){i f(s t r c m p(p->d a t a.n a m e,c h o i c e)==0){p r e->n e x t=p->n e x t;f r e e(p);f l a g=0;p r i n t f("\t删除成功!\n");b r e a k;}p r e=p;p=p->n e x t;}i f(f l a g)p r i n t f("\t没有该学生!\n");}e l s e i f(c h=='B'){p r i n t f("\t输入删除学生的学号:\n\t");s c a n f("%s",c h o i c e);i f(p==N U L L)p r i n t f("\t没有学生信息!\n");w h i l e(p!=N U L L){i f(s t r c m p(p->d a t a.n u m b e r,c h o i c e)==0){p r e->n e x t=p->n e x t;f r e e(p);f l a g=0;p r i n t f("\t删除成功!\n");b r e a k;}p r e=p;p=p->n e x t;}i f(f l a g)p r i n t f("\t没有该学生,请重新输入!\n");}}v o i d i n c r e a s e s t d(s t d n o d e*s t d)//增加学生信息{s t d n o d e*p,*p1;p=s t d->n e x t;p1=(s t d n o d e*)m a l l o c(s i z e o f(s t d n o d e));p r i n t f("\t输入增加学生的学号和姓名:\n\t");s c a n f("%s",&p1->d a t a.n u m b e r);p r i n t f("\t");s c a n f("%s",&p1->d a t a.n a m e);s t d->n e x t=p1;p1->n e x t=p;p r i n t f("\t信息添加成功!\n");}v o i d s e e k s t d(s t d n o d e*s t d)//查找学生信息{s t d n o d e*p;c h a r c h o[l e n],c h;i n t f l a g=1;p=s t d->n e x t;i f(p==N U L L)p r i n t f("\t没有学生信息!\n");p r i n t f("\t选择查找方式: A.名字 B.学号\n\t");g e t c h a r();s c a n f("%c",&c h);i f(c h=='A'){p r i n t f("\t请输入姓名:\n\t");s c a n f("%s",c h o);w h i l e(p!=N U L L){i f(s t r c m p(p->d a t a.n a m e,c h o)==0){p r i n t f("\t学生的信息如下:\n");p r i n t f("\t姓名:%s学号:%s\n",p->d a t a.n a m e,p->d a t a.n u m b e r);f l a g=0;}p=p->n e x t;}i f(f l a g)p r i n t f("\t没有该学生,请重新查找!\n");}e l s e i f(c h=='B'){p r i n t f("\t请输入学号:\n\t");s c a n f("%s",c h o);w h i l e(p!=N U L L){i f(s t r c m p(p->d a t a.n u m b e r,c h o)==0){p r i n t f("\t学生的信息如下:\n");p r i n t f("\t学号:%s姓名:%s\n",p->d a t a.n u m b e r,p->d a t a.n a m e);f l a g=0;}p=p->n e x t;}i f(f l a g)p r i n t f("\t没有该学生,请重新查找!\n");}}v o i d c l e a r s t d(s t d n o d e*s t d)//清空全部信息{s t d n o d e*p;p=s t d->n e x t;w h i l e(p!=N U L L){s t d->n e x t=p->n e x t;p=p->n e x t;}p r i n t f("\t全部信息清空!\n");}v o i d c h a n g e s t d(s t d n o d e*s t d)//修改学生信息{c h a r c h,s e e k[l e n];s t d n o d e*p;i n t f l a g=1;p=s t d->n e x t;i f(p==N U L L)p r i n t f("\t没有学生信息!\n");p r i n t f("\t选择修改方式: A.名字 B.学号\n\t");g e t c h a r();s c a n f("%c",&c h);i f(c h=='A'){p r i n t f("\t输入要修改学生的姓名:\n\t");s c a n f("%s",s e e k);w h i l e(p!=N U L L){i f(s t r c m p(p->d a t a.n a m e,s e e k)==0){p r i n t f("\t输入修改后学生的姓名:\n\t");s c a n f("%s",&p->d a t a.n a m e);f l a g=0;b r e a k;}p=p->n e x t;}i f(f l a g==0)p r i n t f("\t学生信息修改成功!\n");}e l s e i f(c h=='B'){p r i n t f("\t输入要修改学生的学号:\n\t");s c a n f("%s",s e e k);w h i l e(p!=N U L L){i f(s t r c m p(p->d a t a.n a m e,s e e k)==0){p r i n t f("\t输入修改后学生的学号:\n\t");s c a n f("%s",&p->d a t a.n u m b e r);f l a g=0;b r e a k;}p=p->n e x t;}i f(f l a g==0)p r i n t f("\t学生信息修改成功!\n");}}v o i d i n d e x(s t d n o d e*s t d)//模式查找信息{s t d n o d e*p;c h a r s e e k[l e n],c h;i n t n a m e l e n,s e e k l e n,i,j,f l a g=1;p=s t d->n e x t;p r i n t f("\t选择匹配查找的方式: A.名字 B.学号\n\t");g e t c h a r();s c a n f("%c",&c h);i f(c h=='A'){p r i n t f("\t输入姓名匹配字母:\n\t");s c a n f("%s",s e e k);s e e k l e n=s t r l e n(s e e k);w h i l e(p!=N U L L){i=j=0;n a m e l e n=s t r l e n(p->d a t a.n a m e);w h i l e(i<n a m e l e n&&j<s e e k l e n){i f(p->d a t a.n a m e[i]==s e e k[j]){i++;j++;}e l s e{i=i-j+1;j=0;}}i f(j>=s e e k l e n){p r i n t f("\t学生的信息如下:\n");p r i n t f("\t姓名:%s学号:%s\n",p->d a t a.n a m e,p->d a t a.n u m b e r);f l a g=0;}p=p->n e x t;}i f(f l a g)p r i n t f("\t没有该学生,请重新查找!\n");}i f(c h=='B'){p r i n t f("\t输入学号匹配的数字:\n\t");s c a n f("%s",s e e k);s e e k l e n=s t r l e n(s e e k);w h i l e(p!=N U L L){i=j=0;n a m e l e n=s t r l e n(p->d a t a.n u m b e r);w h i l e(i<n a m e l e n&&j<s e e k l e n){i f(p->d a t a.n u m b e r[i]==s e e k[j]){i++;j++;}e l s e{i=i-j+1;j=0;}}i f(j>=s e e k l e n){p r i n t f("\t学生的信息如下:\n");p r i n t f("\t学号:%s姓名:%s\n",p->d a t a.n u m b e r,p->d a t a.n a m e);f l a g=0;}p=p->n e x t;}i f(f l a g)p r i n t f("\t没有该学生,请重新查找!\n");}}i n t m a i n(){i n t c h;s t d n o d e s t d;d o{p r i n t f("┌————————————————───——————————————————─┐\n");p r i n t f("│┈┈┈☆☆欢迎使用学生信息系统☆☆┈┈┈│\n");p r i n t f("│请选择下面操作│\n");p r i n t f("│ 1.创建学生系统 2.学生系统排序3.删除学生信息│\n");p r i n t f("│ 4.增加学生信息 5.查找学生信息6.清除学生信息│\n");p r i n t f("│7.修改学生信息8.模式查找信息9.退出学生系统│\n");p r i n t f("└—————————————————————————————————————─┘\n\t");s c a n f("%d",&c h);s w i t c h(c h){c a s e1:c r e a t e s t d(&s t d);i n p u t s t d(&s t d);b r e a k;c a s e2:s o r t s t d(&s t d);i n p u t s t d(&s t d);b r e a k;c a s e3:d e l e t e s t d(&s t d);i n p u t s t d(&s t d);b r e a k;c a s e4:i n c r e a s e s t d(&s t d);i n p u t s t d(&s t d);b r e a k;c a s e5:s e e k s t d(&s t d);b r e a k;c a s e6:c l e a r s t d(&s t d);b r e a k;c a s e7:c h a n g e s t d(&s t d);i n p u t s t d(&s t d);b r e a k;c a s e8:i n d e x(&s t d);b r e a k;c a s e9:p r i n t f("┈┈┈┈┈┈┈┈┈☆☆欢迎下次使用学生信息系统☆☆┈┈┈┈┈┈┈┈┈┈┈┈┈\n");p r i n t f("\n");b r e a k;}}w h i l e(c h!=9);r e t u r n0;}(六)测试结果创建学生系统学生系统排序模式匹配查找增加学生信息实验结果与实验预期结果相符,符合实验要求。