利用单项链表实现简单的学生信息管理

合集下载

数据结构 用链表实现学生信息管理系统

数据结构 用链表实现学生信息管理系统

3、4、7、#include <iostream>using namespace std;//实现线性表的链式存储结构的类型定义typedef int Elemtype;#define OK 1;#define ERROR -1;struct NODE //结点类型{Elemtype elem;NODE *next;};struct LINK_LIST //链表类型{NODE *head;};//典型操作的算法实现//初始化链表Lint InitList(LINK_LIST *L){L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}else return ERROR ;}//销毁链表Lvoid DestoryList(LINK_LIST *L){NODE *p;while (L->head) //依次删除链表中的所有结点{p=L->head; L->head=L->head->next;free(p);}}//清空链表Lvoid ClearList(LINK_LIST *L){NODE *p;while (L->head->next){ //p指向链表中头结点后面的第一个结点p=L->head->next;L->head->next=p->next; //删除p结点free(p); //释放p结点占据的存储空间}}//求链表L的长度int ListLength(LINK_LIST L){NODE *p;int len;len=0;for(p=L.head;p->next!=NULL; p=p->next)len++ ;return(len);}// 判链表L空否。

学生成绩管理系统源代码 用单向链表实现

学生成绩管理系统源代码 用单向链表实现
int size;
if((fp = fopen("成绩表.dat","rb")) == NULL) { //如果文件不存在,则不进行读取操作
system("pause");
return;
}
else {
fp = fopen("成绩表.dat","rb"); //成功返回一个文件指针
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
typedef struct score { //定义成绩信息结构体
char Number[20];//学号
char Name[20];//姓名
char Chinese[6];//语文成绩
pNodeScore = (p_node_score)malloc(sizeof(node_score));//为节点分配存储空间
if(fread(&pNodeScore->data,sizeof(struct score),1,fp) != 1) //将结构体中的数据以1个单位读入到pNodeScore->data
}
fclose(fp);
}
void View(){
p_node_score pNodeScore;
pNodeScore = headScore;
PrintTitle();//显示标题栏
while(pNodeScore != NULL) {
PrintScore(pNodeScore->data);//输出学生信息和成绩信息

基于单链表的学生信息管理系统源代码

基于单链表的学生信息管理系统源代码
几部分。其功能主要有: ⒈有关学生信息的录入,包括录入学生基本信息、学生考试成绩等。 ⒉学生信息的维护,包括添加修改学生基本信息、考试成绩信息。 ⒊学生信息的查询,包括查询学生的个人基本信息、科目考试成绩。 ⒋信息的报表打印,包括学生的基本信息的报表打印、考试成绩的报表打印。
1.2.2 性能需求 本项目是一个学生信息管理系统,运行环境 VC++6.0,项目运行速率正常,可
(4)本系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系 统化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如 查询、修改、添加,另外还考虑到学生考试成绩,针对这些要求设计了学生信息管 理系统。本系统主要包括信息录入、信息维护、信息查询、报表打印、关闭系统这
3
学生信息管理系统
以满足用户需求。 1、时间特性要求:响应时间要低于 5 秒 2、便捷性:在程序运行过程中,系统自动提示用户进行每一步操作,程序功 能明了简洁!
1.3 本章小结
本章介绍了学生信息管理系统的背景意义,并对本系统功能需求和性能需求进 行了分析,可以清晰看到学生信息管理系统在进行信息管理时的优越性。
4
2.1 系统介绍
1.2 需求分析.......................................................................................................................................................................... 3 1.2.1 功能需求................................................................................................................................................................. 3 1.2.2 性能需求................................................................................................................................................................. 4

以单链表为存储结构,对多个班级(以两个班为例)的学生成绩进行操作

以单链表为存储结构,对多个班级(以两个班为例)的学生成绩进行操作

用C语言编写程序,以单链表为存储结构,对多个班级(以两个班为例)的学生成绩进行管理,要求实现如下功能:(1)通过终端或文件输入若干学生的班级号、学号、成绩,将每个班的数据分别保存在不同的单链表中,数据元素按成绩由高到低的顺序存放;然后分别按顺序(由高到低)输出各班的成绩表。

(2)输入班级、学号和成绩变更(如+5,-3),对各班至少1人的成绩进行修正,修正后仍要保持数据按成绩由高到低有序;然后分别按顺序输出各班的成绩表。

(3)分别输出各班的总人数、最高分、最低分、平均分。

#include<stdio.h>#include<string.h>#include<malloc.h>struct student{char number[9];int score;struct student *next;};typedef struct student st;void load(st **);void insert(st **,st);void change(st **,char *,int);st * deleted(st **,st **,st **,char *);void print(st *head[3]);void analysis(st *head[3]);void main(){int i;char *l =(char *)malloc(10);st stu;st *h1 = NULL,*h2 = NULL,*h3 = NULL;st *head[3] = {NULL,NULL,NULL};printf("--------------------------------------------------------\n\nEnter 1 to insert a date.\nEnter 2 to change a date.\nEnter 3 to print the dates.\nEnter 4 to analysis scores.\nEnter 5 to input dates from a file.\nEnter others to end.\n\n--------------------------------------------------------\n\n");scanf("%d",&i);while(i > 0 && i <= 5){switch(i){case 1:printf("Please enter the date.\n");scanf("%s%d",stu.number,&stu.score);insert(head,stu);break;case 2:printf("Please enter the number of change date and the change score.\n");scanf("%s%d",l,&i);change(head,l,i);break;case 3:print(head);break;case 4:analysis(head);break;case 5:load(&head[0]);}printf("--------------------------------------------------------\n\nEnter 1 to insert a date.\nEnter 2 to change a date.\nEnter 3 to print the dates.\nEnter 4 to analysis scores.\nEnter 5 to input dates from a file.\nEnter others to end.\n\n--------------------------------------------------------\n\n");scanf("%d",&i);}}void load(st **head){FILE *fp;st a = {0},b;char *l;l = (char *)malloc(15);printf("Please enter the file name.\n");scanf("%s",l);if((fp = fopen(l,"rt")) == NULL){printf("File open error.\n");}else{fscanf(fp,"%s%d",a.number ,&a.score);do{insert(head,a);b = a;fscanf(fp,"%s%d",a.number,&a.score);}while(b.score != a.score);fclose(fp);printf("File open successful.\n");}}void insert(st **head,st stu){st *p,*c,*n;n = (st *)malloc(sizeof(st));if(n != NULL){strcpy(n -> number,stu.number);n -> score = stu.score;n -> next = NULL;}elseprintf("Not inserted. No menory available.\n");if(stu .number[5] < 52 && stu .number[5] > 48){p = NULL;c = *(head + stu .number[5] - 49);while(c != NULL&& n -> score < c -> score){p = c;c = c -> next;}if(p){p -> next = n;n -> next = c;}else{n -> next = *(head + stu .number[5] - 49);*(head + stu .number[5] - 49) = n;}}elseprintf("Data error.");}st * deleted(st **head,char * dnumber){st *p,*c = NULL;if(*(dnumber + 5) < 52 && *(dnumber + 5) > 48){for(p = *(head + *(dnumber + 5) - 49);strcmp(p -> number,dnumber) && p -> next;p = p -> next){c = p;}if(p){if(c){c -> next = p -> next;return p;}else{*(head + *(dnumber + 5) - 49) = p -> next;return p;}}else{printf("Did not find the number.\n");return NULL;}}else{printf("data error!");return NULL;}}void change(st **head,char * cnumber,int cscore){st * dst = deleted(head,cnumber);if(dst != NULL){dst -> score = dst -> score + cscore;insert(head,*dst);printf("Data changed successful.");}}void print(st *head[3]){int i = 1;for(int j = 0;j < 3;j ++){if(head[j]){printf("Class %d'scores:\n number score| number score| number score| number score| number score|\n",j);for(st *p = head[j];p != NULL;p = p -> next){if(i % 5 == 0)printf("\n");printf("%s%6d ",p ->number,p ->score);i ++;}printf("\n");i = 1;}}}void analysis(st *head[3]){int total[3] = {0,0,0},h[3] = {0,0,0},l[3] = {100,100,1000},h90[3] = {0,0,0},l60[3] = {0,0,0},th = 0,tl = 0,i;double ave[3] = {0,0,0};for(int i = 0;i < 3;i ++){if(head[i]){for(st *p = head[i];p != NULL;p = p -> next){total[i]++;ave[i] += p -> score;if(p -> score > h[i])h[i] = p -> score;if(p -> score < l[i])l[i] = p -> score;if(p -> score > 90)h90[i]++;if(p -> score < 60)l60[i]++;}}}th = h[0];if(th < h[1])th = h[1];if(th < h[2])th = h[2];tl = h[0];if(tl > h[1])tl = h[1];if(tl > h[2])tl = h[2];printf("class NOP highest lowest ave up90 down60\n");for(i = 0;i < 3;i ++){printf("class%d%3d%8d%7d%6.1f%5d%7d\n",i+1,total[i],h[i],l[i],ave[i] / total[i],h90[i],l60[i]);}printf("total %3d%8d%7d%6.1f%5d%7d\n",total[0] + total[1] + total[2],th,tl,(ave[0] + ave[1] + ave[2]) / (total[0] + total[1] + total[2]),h90[0] + h90[1] + h90[2],l60[0] + l60[1] + l60[2]);}--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------5Please enter the file name.stu.txtFile open successful.--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------3Class 0'scores:number score| number score| number score| number score| number score| 20072101 99 20072103 77Class 1'scores:number score| number score| number score| number score| number score| 20072222 101 20072203 100Class 2'scores:number score| number score| number score| number score| number score| 20072301 88 20072300 66--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------1Please enter the date.20072206102--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------3Class 0'scores:number score| number score| number score| number score| number score| 20072101 99 20072103 77Class 1'scores:number score| number score| number score| number score| number score|20072206 102 20072222 101 20072203 100Class 2'scores:number score| number score| number score| number score| number score| 20072301 88 20072300 66--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------2Please enter the number of change date and the change score.20072206 -5Data changed successful.--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------3Class 0'scores:number score| number score| number score| number score| number score| 20072101 99 20072103 77Class 1'scores:number score| number score| number score| number score| number score| 20072222 101 20072203 100 20072206 97Class 2'scores:number score| number score| number score| number score| number score| 20072301 88 20072300 66--------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------4class NOP highest lowest ave up90 down60 class1 2 99 77 88.0 1 0 class2 3 101 97 99.3 3 0 class3 2 88 66 77.0 0 0 total 7 101 88 89.7 4 0 --------------------------------------------------------Enter 1 to insert a date.Enter 2 to change a date.Enter 3 to print the dates.Enter 4 to analysis scores.Enter 5 to input dates from a file.Enter others to end.--------------------------------------------------------。

C课程设计单链表学生信息管理系统模板

C课程设计单链表学生信息管理系统模板

C课程设计单链表学生信息管理系统学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了”学生信息管理系统”软件, 该软件适用于所有windows 操作系统, 面向广大用户, 界面简洁, 操作简单。

此软件主要是实现对学生学籍信息进行系统化的管理, 能够对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理, 主要是根据学生的学号及其姓名进行操作的。

该软件能够更加方便管理者管理学生学籍信息。

功能需求说明该系统所需要的功能有: 1、链表的建立2、学生信息的插入;3学生信息的查询;、4学生信息的输出;、5学生信息的修改;、6学生信息的删除;、7良好的欢迎选择界面。

、三、总体方案设计一、实现任务的方法1、在欢迎选择界面中, 使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除, 都是使用链表的相关知识3、在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了一个achieve结构体;总体结构ZJ建立链表三、模块划分(1) 链表的建立。

(2) 对链表信息的插入。

(3) 对链表信息的查找。

(4) 对链表信息的输出。

(5) 对链表信息的删除。

(6) 对链表信息的修改。

课程成绩信息作为附加信息,穿插于各个模块中三、数据结构说明」、自定义的数据结构资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。

1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分"谍稈数〃课程名(最參课程数为nn "学分 "总分"平均分 "默认枸匯雷数"计算该学生课程的加权平均分(总咸绩/总学分)2、inform (学生基本信息)用于存放学生基本信息,包括姓名、 学号、性别等。

"元素类型 "姓容 〃学号 “性别 "身份证号"出生年月曰 "家庭地址 "电话号码 "课程咸绩〃谍程咸绩输入 "遥程成缢输出3、结点结构-Nodetype,定义了数据域inform 和指针域next; structNodetype//结点结构{inform data; /7数据域Node type 切氏t; 〃指针域};Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。

数据结构:运用单链表 制作 学生成绩管理系统

数据结构:运用单链表 制作 学生成绩管理系统

单链表操作的实现
int GetElem(Node* head, int i) // 取第i个数据元素 void Insert(Node *head, int i, int d) // 插入数据元素
void Delete(Node *head, int i)
void Clear(Node *head) Node * CreateList(int n)
学生成绩管理系统
Team Members
Content
单链表
1 2 3 4
介绍 操作实现 删除结点 插入结点
学生成绩管理系 运行结果
4
单链表
头指针
头结点
链表为空时, 头结点的指针域为空
空指针

a1
a2
… ... an ^
有时为了操作方便,在第一个结点之前虚 加一个“头结点”,以指向头结点的指针 为链表的头指针。
利用单链表实现四大功能:
(1)输入记录: (2)查询记录: (3)更新记录: (4)输出记录:
主控main()函数的执行流程
若选1 调用add_record()函数,增加学生记录; 若选2 调用delete_record()函数,进行删除操作; 若选3 调用search_record()函数,进行查询操作; 若选4 调用modify_record()函数,进行修改操作;
// 删除数据元素
// 清除链表 // 生成含 n 个数据元素的链表
单链表操作:
(1)单链表中删除节点的示意图如下:
算法表示:p1->next=p2->next;
(2)单链表中插入节点的示意图如下:
算法表示:s>next=p->next;p->next=s;

用链表实现学生信息存储系统

用链表实现学生信息存储系统

#include <stdio.h>#include <stdlib.h>#include <string.h>#define PF printf#define LEN sizeof(struct student)//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆定义结构体◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆struct student{char NO[20];char name[20];int age;char sex[3]; /*'F'表示性别男,'M'表示性别女*/char birthday[10];char address[30];char phone[20];char e_mail[20];struct student *next; //下个结点};typedef struct student STU;STU *head=NULL; //全局指针int n,i=0; //全局变量//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆自定义函数◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void show_menu(); //显示菜单void menu(); //执行菜单void creat_stu(); //建立链表void insert_stu(); //学生信息录入void print_stu(); //学生信浏览void search_NO(); //以学号方式查询信息void search_name(); //以姓名方式查询信息void arrage_stu(); //排序void del_stu(); //删除学生信息void revise_stu(); //修改学生信息void save(); //保存信息void main(){creat_stu();menu();}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆创建链表◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void creat_stu(){FILE *fp;long size;STU *p1,*p2;head=(STU *)malloc(sizeof(STU));head->next=NULL;if((fp=fopen("fname.txt","r"))==NULL){printf("这是新表\n");return;}fseek(fp,0L,2);size=ftell(fp);if(!size){printf("这是空表\n");return;} //开始创建链表rewind(fp); //移动到文件首p2=head->next; //找到但前位置while(!feof(fp)){p1=(STU *)malloc(sizeof(STU));fscanf(fp,"%s %s %d %s %s %s %s %s\n",p1->NO,p1->name,&p1->age,\p1->sex,p1->birthday,p1->address,p1->phone,p1->e_mail);p1->next=NULL;//创建节点完if(head->next==NULL)head->next=p1;elsep2->next=p1;p2=p1;n++;}p2->next=NULL;fclose(fp);//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆执行菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void menu(){int c;show_menu();while(1){scanf("%d",&c);switch(c){getchar();case 1:insert_stu();break;case 2:print_stu();break;case 3:search_NO(); break;case 4:search_name(); break;case 5:del_stu(); break;case 6:revise_stu(); break;case 7:arrage_stu();break;case 0:exit(0);} //执行菜单选项show_menu();}}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆显示菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void show_menu(){PF("\n");PF("\n※※※※※※※※※※※※※※※※※※菜单※※※※※※※※※※※※※※※※※※\n");PF("\t\t◆1.输入学生信息◆\n");PF("\t\t★2.浏览学生信息★\n");PF("\t\t◆3.以学号方式查询信息◆\n");PF("\t\t★4.以姓名方式查询信息★\n");PF("\t\t◆5.删除学生信息◆\n");PF("\t\t★6.修改学生信息★\n");PF("\t\t◆7 排序◆\n");PF("\t\t★0. 退出★\n");PF("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");PF("\n请选择\n");}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息录入◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void insert_stu() //学生信息录入{n=0;STU *p1=NULL,*p2=NULL;p1=(STU *)malloc(sizeof(STU));PF("\n※※※※※※※※※※※※※※※※※※录入学生信息※※※※※※※※※※※※※※※※※※\n"); //录入学生信息PF("\t\t输入学生学号:\t");scanf("%s",p1->NO); //学号PF("\t\t输入学生姓名:\t");scanf("%s",p1->name); //姓名PF("\t\t输入学生年龄:\t");scanf("%d",&p1->age); //年龄PF("\t\t输入学生性别:\t");scanf("%s",p1->sex); //性别PF("\t\t输入学生出生年月:\t");scanf("%s",p1->birthday); //出生年月PF("\t\t输入学生地址:\t");scanf("%s",p1->address); //地址PF("\t\t输入学生电话:\t");scanf("%s",p1->phone); //电话PF("\t\t输入学生E-mail:\t");scanf("%s",p1->e_mail); //E-mailn++;if(head->next==NULL){head=(STU *)malloc(LEN);head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2->next=p1;}p1->next=NULL;save();//保存到文件}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息浏览◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void print_stu() //学生信浏览{STU *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}for(p=head->next;p!=NULL;p=p->next) //读出信息{PF("※※※※※※※※※※※※※※※※※※学生信息浏览※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n");} //输出信息}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生姓名信息查找◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void search_name() //学生姓名信息查找{STU *p=NULL;char name[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("输入学生姓名:");scanf("%s",name);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->name,name)){PF("※※※※※※※※※※※※※※※※※※您查找的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n");i=1;}} //输出信息if(!i){PF("无该生信息!请查证:"); } //没找到信息时的处理}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生学号信息查找◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void search_NO() //学生学号信息查找{STU *p=NULL;char NO[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("请输入学生学号:");scanf("%s",NO);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->NO,NO)){PF("※※※※※※※※※※※※※※※※※※您查找的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n");i=1;}} //输出信息if(!i){PF("无该生信息!请查证:"); } //没找到信息时的处理}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆修改学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void revise_stu(){STU *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}char NO[20];PF("请输入学生的学号:\t");scanf("%s",NO);for(p=head->next;p!=NULL;p=p->next){if(!strcmp(p->NO,NO)) //验证信息是否正确{PF("※※※※※※※※※※※※※※※※※※您要修改的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n"); //输出要修改信息i=1;PF("※※※※※※※※※※※※※※※※※※修改学号为%s的学生※※※※※※※※※※※※※※※※※※\n",NO);strcpy(p->NO,NO);PF("\t\t输入修改学生姓名:\t");scanf("%s",p->name);PF("\t\t输入修改学生年龄:\t");scanf("%d",&p->age);PF("\t\t输入修改学生性别:\t");scanf("%s",p->sex);PF("\t\t输入修改学生出生年月:\t");scanf("%s",p->birthday);PF("\t\t输入修改学生地址:\t");scanf("%s",p->address);PF("\t\t输入修改学生电话:\t");scanf("%s",p->phone);PF("\t\t输入修改学生E-mail:\t");scanf("%s",p->e_mail);PF("\n"); //输入修改信息save();}}if(!i){PF("无该生信息!请查证:");} /*没找到信息时的处理*/}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆删除学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void del_stu(){STU *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}else{char NO[20];PF("请输入学生的学号:\t");scanf("%s",NO);for(p=head;p!=NULL;p=p->next)if(!strcmp(p->next->NO,NO)) //验证信息是否正确{PF("※※※※※※※※※※※※※※※※※※您要删除的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->next->NO);PF("\t\t学生姓名:\t%s\n",p->next->name);PF("\t\t学生年龄:\t%d\n",p->next->age);PF("\t\t学生性别:\t%s\n",p->next->sex);PF("\t\t学生出生年月:\t%s\n",p->next->birthday);PF("\t\t学生地址:\t%s\n",p->next->address);PF("\t\t学生电话:\t%s\n",p->next->phone);PF("\t\t学生E-mail:\t%s\n",p->next->e_mail);PF("\n"); //输出要删除的信息i=1;if(p->next->next){printf("第一个\n");p->next=p->next->next;}elsep->next=NULL;n--;save();return;}if(!i){PF("无该生信息!请查证:"); //没找到信息时的处理return;}}}}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆按学号排序◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void arrage_stu(){STU *p1,*p2;int in=0,j;if(head->next==NULL) //首先判断{printf("你还没有记录,无法排序\n");return ;printf("n=%d",n);p1=head->next;for(in=0;in<n-1;in++)for(j=0,p1=head->next;j<=n-in-3;p1=p1->next,j++){if(j==0)//第一次比较第一个和第二个节点信息{if(strcmp(p1->NO,p1->next->NO))//比较p1本身和p1下一个节点{p2=p1->next;p1->next=p1->next->next;p2->next=p1;head->next=p2;p1=head->next;//从新给CUR赋值/*p1=head->next;p1=p2;错误:如果一个变量=他前一个节点的NEXT 那么不可以说把另外一个变量赋给它就可以改变它前一个节点的NEXT 他只能操作后节点*/}}if(strcmp(p1->next->NO,p1->next->next->NO))//比较p1下一个和p1下两个节点{p2=p1->next;p1->next=p1->next->next;p2->next=p1->next->next;p1->next->next=p2;}}if(strcmp(head->next->NO,head->next->next->NO))//只有两个节点信息时直接比较他们两个{p1=head->next;head->next=p1->next;p1->next=p1->next->next;head->next->next=p1;if(n==2) //只有两个节点信息时把第二个节点的next赋为空head->next->next->next=NULL;}}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆保存信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void save(){printf("※※※※※※※※※※※※※※※※※※保存信息并结束※※※※※※※※※※※※※※※※※※\n");STU *p=NULL;FILE *fp;char *filename="fname.txt";if((fp=fopen("fname.txt","w"))==NULL) //出错检测{printf("\n打不开文件!\n");return;}if(head->next==NULL){printf("\n信息为空!\n");return;}elsep=head->next;while(p!=NULL){fprintf(fp,"%s %s %d %s %s %s %s %s\n",p->NO,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->e_mail);//存入文件p=p->next;}printf("保存完毕!\n");fclose(fp);}。

学生管理系统(链表版)

学生管理系统(链表版)

first=s; } else { q=first; while(q->next !=p)//查找待插入的节点 p 的前驱节点 q q=q->next ; q->next =s;//将新节点 s 插入在 q 和 p 之间 s->next =p; } return first; } //在 first 指向的单链表中,删除学号为 a 的节点 Lnode *delete_(Lnode **first,int a)//学号为 a { Lnode *q=*first,*p=*first; if(*first==NULL) //如果链表为空链表 return NULL; if((*first)->data.num==a)//如果被删除的节点是首节点 { p=*first; *first=(*first)->next; return p; } for(q=*first;q->next;q=q->next)//如果待删除节点是中间节点 { p=q->next; if(p->data.num==a)//找到符合要求的节点 { q->next=p->next;//删除节点 p return p; } } return NULL; } //在 first 指向的单链表中,查找学号为 num 的节点 Lnode *find(Lnode *first,int num) {
//按数学成绩排序的总算法 Lnode *sortmath(Lnode *first); //按平均分成绩排序的总算法 Lnode *sortaverage(Lnode *first); //在 first 指向的单链表中,按 math 排序 Lnode *sort_math(Lnode *first,Lnode *s); //链表的倒置 Lnode *reverse(Lnode *first); //按计算机最大值排序 void maxcomputer(Lnode *first); //按英语最大值排序 void maxenglish(Lnode *first); //按平均分最大值排序 void maxaverage(Lnode *first); //按数学最大值排序 void maxmath(Lnode *first); //在 first 指向的单链表中,按 average 排序 Lnode *sort_average(Lnode *first,Lnode *s);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用单项链表实现简单的学生信息管理一、题目:利用单项链表实现简单的学生信息治理(07)二、设计思路1、总体设计1)分析程序的功能创建单项链表储存学生的各项信息,学号、姓名、成绩。

并能够完成学生信息的插入、删除及信息的显示功能。

2)系统总体结构:按照程序要求的功能采纳结构化的设计思想,划分为五个功能模块,即创建链表、插入函数、删除函数、显示函数和主函数。

2、各功能模块的设计:讲明各功能模块的实现方法①头文件:对自己定义的函数进行函数声明。

②主函数:进行函数的调用,实现各函数的功能,达到预期的目的。

③函数定义部分:定义各个功能函数,创建链表函数、插入新信息函数、删除信息函数、显示信息函数。

3、设计中的要紧困难及解决方案1)在插入新信息时,有插入点在表头、中间、表尾三种情形,为此采纳讨论的方法,把三种情形进行讨论使其分开进行。

2)在删除信息时,有删除的为头结点和中间结点的情形,采纳讨论的方法,把两种情形分开来进行。

4、你所设计的程序最终完成的功能1)创建链表、插入新信息、删除信息、显示信息。

2)测试数据①输入的数据99812 LiuLifang 91学号姓名成绩96085 WangLiPing 7798120 ZhangLi 7599912 LiuHai 80 ③删除的数据学号姓名成绩99812 liulifang 91运行结果三、程序清单本程序包含creatlist.cpp、insert.cpp、del.cpp、output.cpp、main.cpp、头文件.h六个文件#include<iostream.h>#include"头文件.h"int n;student *creatlist(){student *head;student *p1;student *p2;n=0;head=NULL;p1=new(student); //创建一个新结点p2=p1;cin>>p1->num>>p1->name>>p1->score;while(p1->num!=0) //链表建立过程终止的判定条件{n++;head=p1;elsep2->next=p1; //原链表结点指向新建结点p2=p1;p1=new(student);cin>>p1->num>>p1->name>>p1->score;}delete(p1);p2->next=NULL;return head; //返回表头}2、insert.cpp文件清单#include<iostream.h>#include"头文件.h"student *insert(student *head,student *t){student *p0; //待插入点student *p1;student *p2; //p0插入p1之前,p2之后p1=head;p0=t;if(p1==NULL) //原链表是空表{head=p0;p0->next=NULL;}elsewhile((p0->num>p1->num)&&(p1->next!=NULL)) //查找待插入点{p2=p1;p1=p1->next;}if(p0->num<=p1->num){if(p1==head) //要插入的位置在表头{head=p0;p0->next=p1;}else //要插入的位置不是表头{p2->next=p0;p0->next=p1;}}else //插入表尾结点之后{p1->next=p0;p0->next=NULL;}}return head; //返回表头}3、del.cpp文件清单#include<iostream.h>#include"头文件.h"student *del(student *head,int num){student *p1;student *p2;if(head==NULL) //原链表是空表{cout<<"List is NULL\n";return head;}p1=head;while((num!=p1->num)&&(p1->next!=NULL)) //查找带要删除的结点{p2=p1;p1=p1->next;if(num==p1->num){if(p1==head) //要删除的是头结点head=p1->next;else //要删除的不是头结点p2->next=p1->next;delete(p1); //开释被删除结点所占的内存空间cout<<"delete: "<<num<<endl;}elsecout<<"not found"<<endl;return head; //返回表头}4、output.cpp文件清单#include<iostream.h>#include"头文件.h"void output(student *head){if(head==NULL) //原链表是空表cout<<"list is NULL\n";else{student *p1;p1=head;cout<<"学生的成绩信息"<<endl;cout<<"学号"<<"\t姓名"<<"\t成绩\n";do //输出链表中各个同学的信息{cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->score<<endl;p1=p1->next;}while(p1!=NULL);}}5、main.cpp文件清单#include<iostream.h>#include"头文件.h"void main(){student *headl;cout<<"输入学生的成绩信息"<<endl;cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;headl=creatlist();int k;{cout<<endl;cout<<"--------菜单选项---------"<<endl;cout<<"1.插入新信息 ,请选择:1"<<endl;cout<<"2.删除信息, 请选择:2"<<endl;cout<<"3.显示信息, 请选择:3"<<endl;cout<<"4.终止程序, 请选择:4"<<endl;cout<<" 选择";cin>>k;if(k==1) //插入新信息{int m;cout<<"输入插入学生人数"<<endl;cin>>m;cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;for(int i=0;i<m;i++){student *stu;stu=new(student);cin>>stu->num>>stu->name>>stu->score;headl=insert(headl,stu);}}else if(k==2) //删除信息{int num;cout<<"输入要删除学生的学号\n";cin>>num;headl=del(headl,num);}else if(k==3) //显示信息{output(headl);}else //终止程序break;};}6、头文件.h文件清单struct student //定义结构体类型{int num;char name[20];student *next;};student *creatlist(); //创建链表函数原型讲明student *insert(student * ,student * ); //插入函数原型讲明student *del(student * ,int ); //删除函数原型讲明void output(student * ); //显示函数原型讲明四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评判。

完成了课程设计的差不多要求,同时在此基础上进行了一些创新,使用了多文件,使程序看起来更清晰更有条理。

但由于能力有限,以及对C++的认识不深,其中还有不够完善合理的地点。

2、对课题提出更完善的方案增加按照成绩对链表进行排序的功能,使学生信息能够按照成绩的高低进行显示,能够更清晰地显示学生的学习情形五、收成及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。

加深了对利用C++语言进行程序设计的明白得,提高了对函数的运用能力,提高了软件系统分析能力和使用多文件、归纳总结的能力。

2、收成和心得体会。

通过自己对单项链表的学习,熟悉了链表的建立、插入、删除等操作方法。

通过这次课程设计使我明白了自学的重要性,有了一些自学的学习方法和技巧,同时要积极的与其他同学共同讨论,在讨论中才能找到自己认识的不足,改正自己的错误。

日期:2018年6月20日。

相关文档
最新文档