精华内容
下载资源
问答
  • C语言基础篇02:单链表实现学生成绩管理系统
    千次阅读
    2021-11-22 10:41:34

    前言

    	上篇已经讲过单链表的基本实现,这篇将以一个简单的管理系统入手。
    详细讲解下如何在原来单链表的基础上实现一个简单的管理系统。
    	上篇文章入口:[单链表的实现](https://blog.csdn.net/qq_39625143/article/details/121420507?spm=1001.2014.3001.5501)
    

    需求分析

    	在各位同学的C语言入门课程中,很常见的会遇到各类管理系统的题目,
    其实这些题目的要求大同小异,无外乎四个操作,增删改查。而在以后的工作中,
    许多后端的工程师面里的最大的要求也就是增删改查。当然后面牵扯到大数据量的处理
    数据库的优化等等...
    	那么一个简单的学生成绩管理系统应该具备或者说基本的功能应该有,
    学生成绩的录入、查询、修改、删除、以及统计,其中可能还牵扯到读写文件。
    那么在已知这个的条件下,比较适合作为点链表存储的内容应该是学生信息结构体
    
    typedef struct STUDENTINOF
    {
    	char id[BSIZE];
    	char name[BSIZE];
    	char major[BSIZE];
    	int C;
    	int computer;
    	int physics;
    	int atomic;
    	int optics;
    }s_info;
    
    typedef struct STUDENTNODE
    {
    	s_info info;
    	struct STUDENTNODE * next;
    }s_node;
    

    详细设计

    增加成绩信息

    	一般情况下,学生的学号都会是唯一的,或者也可以以姓名作为唯一,
    当然这个牵扯到详细的设计。在一般情况下我们都知道,姓名可能重复,但是
    在学校里学号应该是唯一的,所以我们以学生的学号作为主键,那么我们就知道,当
    学号重复的时候,当前数据就不应该被插入了,于是我们有了下面两段代码
    
    // An highlighted block
    s_node * CreateNode(s_info data)//创建学生节点
    {
    	s_node * node = (s_node*)malloc(sizeof(s_node));
    	node->next = NULL;
    	node->info = data;
    	return node;
    }
    int FindStudent(char *id)//寻找学号是否已经在链表内
    {
    	s_node * node = h_node->next;
    	while (node != NULL)
    	{
    		if (strcmp(node->info.id, id) == 0)
    		{
    			return 1;
    		}
    		node = node->next;
    	}
    	return 0;
    }
    int AddStudent(s_info info)//添加学生
    {
    	s_node * node = NULL;
    	if (FindStudent(info.id) == 1)return 0;
    	node = CreateNode(info);
    	node->next = h_node->next;
    	h_node->next = node;
    	return 1;
    }
    
    

    删除成绩信息

    	删除成绩信息也就是删除单链表内,符合条件的某个节点,那么一般我们会提供
    一个条件作为删除的,在这里我是以学号作为删除条件
    
    // An highlighted block
    int DeleteINode(char *id)//删除学生成绩节点
    {
    	s_node * node = h_node;
    	s_node * temp = NULL;
    	while (node->next != NULL)
    	{
    		if (strcmp(node->next->info.id, id) == 0)
    		{
    			temp = node->next;
    			node->next = temp->next;
    			free(temp);
    			return 1;
    		}
    		node = node->next;
    	}
    	return 0;
    }
    

    修改成绩信息

    	修改和删除类似,不过修改是不需要释放节点,只需要吧数据进行修改,所以可以先找到节点的指针,然后把修改后
    的数据赋值给节点内当前数据。ps:这里有个地方要注意,结构体可以用=号进行赋值,但是如果是数组的话不可以直接
    赋值,要用具体的拷贝函数。
    
    // An highlighted block
    int UpdateINode(s_info info)//更新学生成绩信息
    {
    	s_node * node = h_node;
    	while (node->next != NULL)
    	{
    		if (strcmp(node->next->info.id, info.id) == 0)
    		{
    			node->next->info = info;
    			return 1;
    		}
    		node = node->next;
    	}
    	return 0;
    }
    

    查询学生信息和浏览学生信息

    	这两个放到一起来说,其实两个功能没有本质上的区别,都是对单链表的遍历。查询顾名思义,根据某种条件
    查找符合条件的学生信息进行打印。浏览则是把每一个学生成绩信息都打印出来
    
    // An highlighted block
    void SelectSocreForID(char *id)//查询学号为xx的成绩信息
    {
    	s_node * node = h_node->next;
    	while (node != NULL)
    	{
    		if (strcmp(node->info.id, id) == 0)
    		{
    			printf("学号:%s\n姓名:%s\n专业:%s\nC语言:%d\n计算物理学:%d\n大学物理:%d\n原子物理:%d\n光学:%d\n", node->info.id, node->info.name, node->info.major, node->info.C, node->info.computer, node->info.physics, node->info.atomic, node->info.optics);
    			return;
    		}
    		node = node->next;
    	}
    	printf("未查找到对应学生信息\n");
    }
    
    void SelectSocreForName(char *name)//根据姓名查询
    {
    	s_node * node = h_node->next;
    	printf("  学号\t\t    姓名  \t  专业\tC语言\t计算物理学\t大学物理\t原子物理\t光学\n");
    	while (node != NULL)
    	{
    		if (strcmp(node->info.name, name) == 0)
    		{
    			printf("%s\t%8s\t%6s\t%5d\t%10d\t%8d\t%8d\t%4d\n", node->info.id, node->info.name, node->info.major, node->info.C, node->info.computer, node->info.physics, node->info.atomic, node->info.optics);
    		}
    		node = node->next;
    	}
    }
    
    void SelectSocreForMajor(char *major)//根据专业查询
    {
    	s_node * node = h_node->next;
    	printf("  学号\t\t    姓名  \t  专业\tC语言\t计算物理学\t大学物理\t原子物理\t光学\n");
    	while (node != NULL)
    	{
    		if (strcmp(node->info.major, major) == 0)
    		{
    			printf("%s\t%8s\t%6s\t%5d\t%10d\t%8d\t%8d\t%4d\n", node->info.id, node->info.name, node->info.major, node->info.C, node->info.computer, node->info.physics, node->info.atomic, node->info.optics);
    		}
    		node = node->next;
    	}
    }
    
    void SelectAllStudent()//浏览学生信息
    {
    	s_node * node = h_node->next;
    	printf("  学号\t\t    姓名  \t  专业\tC语言\t计算物理学\t大学物理\t原子物理\t光学\n");
    	while (node != NULL)
    	{
    		printf("%s\t%8s\t%6s\t%5d\t%10d\t%8d\t%8d\t%4d\n", node->info.id, node->info.name, node->info.major, node->info.C, node->info.computer, node->info.physics, node->info.atomic, node->info.optics);
    		node = node->next;
    	}
    }
    
    void SelectSocre(char *id, int subject)//根据学号,科目 打印学生成绩信息
    {
    	s_node * node = h_node->next;
    	while (node != NULL)
    	{
    		if (strcmp(node->info.id, id) == 0)
    		{
    			switch (subject)
    			{
    			case 1:
    				printf("C语言成绩:%d\n", node->info.C);
    				return;
    			case 2:
    				printf("计算物理学成绩:%d\n", node->info.computer);
    				return;
    			case 3:
    				printf("大学物理成绩:%d\n", node->info.physics);
    				return;
    			case 4:
    				printf("原子物理成绩:%d\n", node->info.atomic);
    				return;
    			case 5:
    				printf("光学成绩:%d\n", node->info.optics);
    				return;
    			default:
    				return;
    			}
    		}
    		node = node->next;
    	}
    	printf("未查找到成绩信息\n");
    }
    void SelectSocreCount(char *id)//根据学号查询总分
    {
    	s_node * node = h_node->next;
    	while (node != NULL)
    	{
    		if (strcmp(node->info.id, id) == 0)
    		{
    			printf("总成绩:%d\n", node->info.C + node->info.computer + node->info.physics + node->info.atomic + node->info.optics);
    		}
    		node = node->next;
    	}
    }
    
    

    总结

    	以上就是对一个完整的操作单链表的管理系统,这里略去了界面录入这一块,需要的可以到我的csdn资源里下载,
    也可以留下邮箱,博主给你们发送,总而言之希望这篇博文对朋友们的单链表学习有所帮助
    资源地址[C语言学生成绩管理系统](https://download.csdn.net/download/qq_39625143/46722059)
    
    更多相关内容
  • 实现对学生基本的增删改查功能,自定性强,可根据自己需求随意调整。
  • int main(void) { while (1) { Menu(); InputChoice(); system("pause"); system("cls");//清屏 } system("pause"); return 0; }
  • 学生信息管理系统,压缩包有源码,程序,报告。声明:本人只是用来学习。
  • C++单链表学生管理系统(结构体嵌套)

    千次阅读 2021-04-07 22:46:34
    单链表学生管理系统(C++)原理代码用到的头文件结构体菜单用到的函数 原理 利用俩个结构体嵌套,实现简单的学生管理系统 代码 用到的头文件 #include<cstring> #include<stdbool.h> #include<stdlib....

    原理

    利用俩个结构体嵌套,实现简单的学生管理系统

    代码

    可能用到的头文件

    #include<cstring>
    #include<stdbool.h>
    #include<stdlib.h>
    #include<iostream>
    #include<malloc.h>
    #include<cmath>
    using namespace std;
    

    结构体(环环相扣)

    struct student
    {
        char name[20];
        long long int number;
        float score;
    };
    
    struct Class
    {
        student stu;
        Class* next;
        //只能指同类型的指针 不然会"爆"  //为什么next要放这里  因为next所指的东西在Class里面
    };
    

    菜单

    void menu(){
        cout<<"--1.建立头节点"<<endl;
        cout<<"--2.尾插法(为空的时候往里面导)"<<endl;
        cout<<"--3.插入结点(班级)"<<endl;
        cout<<"--4.输出单链表"<<endl;
        cout<<"--5.输出链表长度"<<endl;
        cout<<"--6.查找(按学号查找)"<<endl;
        cout<<"--7.删除单链表中某个元素"<<endl;
        cout<<"--8.摧毁单链表"<<endl;
    }
    

    用到的函数

    bool  InitList(Class* & L);        //建立头节点
    bool  GreatList(Class* &L);      //尾插法(为空的时间往里面导)
    bool  InsertClass(Class* & L);    //插入结点(班级)
    bool  DispList(Class* &L);     //输出单链表
    bool  ListLength(Class* L);       //输出链表长度
    bool  LocateElem(Class* L);       //查找(按学号查找)
    bool  DeleteList(Class* &L);     //删除单链表中某个元素
    bool  DestroyListy(Class* & L);   //摧毁单链表
    

    主函数

    int main(){
        Class* L = NULL;
        bool flag = true;
        int n;
        menu();
        while(cin>>n){
            switch(n){
            case 1:flag = InitList(L);break;       //建立头节点
            case 2:flag = GreatList(L);break;      //尾插法(为空的时候往里面导)
            case 3:flag = InsertClass(L);break;    //插入结点(班级)
            case 4:flag = DispList(L);break;     //输出单链表
            case 5:flag = ListLength(L);break;      //输出链表长度
            case 6:flag = LocateElem(L);break;      //查找
            case 7:flag = DeleteList(L);break;     //删除
            case 8:flag = DestroyListy(L);break;   //摧毁
            default:cout<<"输入有误"<<endl;
            }
            if(flag == true)
                cout<<"操作成功"<<endl;
            else
                cout<<"操作失败"<<endl;
            menu();
        }
    }
    

    初始化单链表

    bool InitList(Class* & L){
        L=(Class*)malloc(sizeof(Class));
        if(L == NULL){
            cout<<"创建错误";
        }
        L->next = NULL;
    }
    

    尾插法

    bool GreatList(Class * &L){
        if(L==NULL){
            cout<<"插入失败\n";
            return false;
        }
        int n;
        Class* p = NULL;
        Class* q = NULL;
        q = L;
        cout<<"请输入学生个数:";
        cin>>n;
        for(int i = 0;i < n; i++){
            p = (Class*)malloc(sizeof(Class));
            if(p == NULL){
                i--;
                continue;
            }
        cout<<"请输入该学生姓名:";
        cin>>q->stu.name;
        cout<<"请输入该学生学号:";
        cin>>q->stu.number;
        cout<<"请输入该学生成绩:";
        cin>>q->stu.score;
        q->next = p;
        q = p;
        q ->next = NULL;
        }
    
    }
    

    插入结点(班级) 一次插一组

    bool InsertClass(Class* &L){
        if(L == NULL){
            cout<<"班级不存在"<<endl;
            return false;
        }
        int n;
        Class* p = NULL;
        Class* q = NULL;
        p = L; //p指向L尾结点
        cout<<"输入插入的位置";
        cin>>n;
        if(n<1){
            cout<<"该位置不存在"<<endl;
        }
        for(int i = 0;i< n-1;i++){
            p= p->next;
            if(p==NULL){
                cout<<"该位置不存在"<<endl;
                return false;
            }
        }
        while(q==NULL){
            p = (Class*)malloc(sizeof(Class));
        }
        cout<<"请输入该学生姓名:";
        cin>>q->stu.name;
        cout<<"请输入该学生学号:";
        cin>>q->stu.number;
        cout<<"请输入该学生成绩:";
        cin>>q->stu.score;
        q->next = p->next;
        p->next = q;
    }
    

    输出单链表

    bool DispList(Class* & L){
        Class *p = L->next;
        if(L== NULL){
            cout<<"无相关信息";
            return false;
        }
        while(p!=NULL){
            cout<<"姓名"<<p->stu.name<<"   ";
            cout<<"学号"<<p->stu.number<<"   ";
            cout<<"成绩"<<p->stu.score<<"   ";
            p = p->next;
        }
    }
    

    求单链表长度

    bool ListLength(Class* L ){
        if(L == NULL){
            cout<<"无法输出";
            return false;
        }
        int n = 0;
        Class * p = L;
        while(p->next!=NULL){
            n++;
            p=p->next;
        }
        cout<<"长度为:"<<n<<endl;
    }
    

    查找:按学号查找

    bool LocateElem(Class * L){
        if(L == NULL){
            cout<<"查找有误";
            return false;
        }
        long long int i;
        Class* p = L->next;
        cout<<"输入该学学生学号吧:";
        cin>>i;
        while(p!=NULL){
            if(p->stu.number == i){
                cout<<"姓名"<<p->stu.name<<"   ";
                cout<<"学号"<<p->stu.number<<"   ";
                cout<<"成绩"<<p->stu.score<<"   ";
                p = p->next;
            }
        }
        if( p == NULL){
            cout<<"无该学生";
            return false;
        }
    }
    

    删除单链表中的元素

    bool DeleteList(Class*  &L){
        if(L == NULL){
            cout<<"无法释放";
            return false;
        }
        Class* p = L;
        Class * q;
        int i , n;
        cout<<"请输入要删除同学的位置";
        cin>>n;
        if(n < 1){
            cout<<"无该学生";
            return false;
        }
        q = p->next;
        p ->next =q->next;
        free(q);
    }
    

    删除单链表(全部释放)

    bool DestroyListy(Class* & L){
        if(L == NULL){
            cout<<"无法释放";
            return false;
        }
        Class* p = L;
        Class* q = p->next;
        q = L ->next;
        while(q!=NULL){
            free(p);
            p = q;
            q = p ->next;
        }
        free(p);
        L = NULL;
    }
    
    展开全文
  • 本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序。 //程序包括如下功能。 //1.建立学生成绩表,包含学生的...
  • 本人自己做的数据结构C语言实现链表学生管理系统 其中有代码 封面 论文总结 论文说明书 反正是应有尽有 是学数据结构学生交课设的一个好选择 别错过
  • 编译环境vs2017 用单链表实现学生成绩管理系统 文件包含源代码和可执行文件 为以后算法与数据结构的同学提供帮助
  • 单链表做的学生管理系统,包括排序,查找,如果年龄相同的话则按学号顺序
  • cout学生成绩管理系统-------------------------"; cout时间:" (&t); cout*******************************************************************************\n" 录入学生信息\n" 显示所有学生信息\n" ...
  • 主要为大家详细介绍了C语言实现学生信息管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 单链表实现数据的插入、查找、删除、修改
  • 记录大一粗略学习C语言后以链表做一个简单的学生管理系统,数据以Excel转为txt文本格式的文件进行输入。 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> ...

    记录大一粗略学习C语言后以链表做一个简单的学生管理系统,数据以Excel转为txt文本格式的文件进行输入。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<conio.h>
    
    struct student     
    {	
    	char name[25];	//姓名 
    	int stunum;		//学号 
    	double score1;	//平时成绩 
    	double score2;	//作业成绩 
    	double score3;	//考试成绩 
    	double sumscore;	//总成绩 
    	struct student * next;
    };
    
    int main()
    {
    	void Menu();
    	struct student * entrysystem(void);
    	void print(struct student * head);
    	struct student * searchsystem(struct student* head); 
    	struct student *DeleteStudent(struct student* head);
    	struct student* Listsort(struct student* head);
    	struct student * head;
    	while(1)
    	{
    		Menu();   //显示菜单
    
    		char a = getch();   //按照菜单输入数字序号
    		switch (a)
    		{
    		case '1':      //成绩信息录入
    			head = entrysystem();
    			break;
    		case '2':      //成绩信息显示
    			print(head);
    			break;
    		case '3':      //查询功能
    			searchsystem(head);
    			break;
    		case '4':      //成绩信息删除
    			DeleteStudent(head);
    			break;
    		case '5':      //排序功能
    			head = Listsort(head);
    			break;
    		case '0':      //退出
    			return 0;
    			break;
    		default:
    			printf("输入有误\n");
    			system("pause");
    			system("cls");
    			break;
    
    		}
    	}
    	return 0;
    }
    
    void Menu()
    {
    
    	printf("=============================================\n");
    	printf("*            请按序号选择功能               *\n");
    	printf("*        1、成绩信息录入功能                *\n");
    	printf("*        2、成绩信息显示浏览功能            *\n");
    	printf("*        3、查询功能                        *\n");
    	printf("*        4、成绩信息删除功能                *\n");
    	printf("*        5、排序功能                        *\n");
    	printf("*        0、退出                            *\n");
    	printf("=============================================\n");
    	
    }
    
    
    struct student * entrysystem(void)    //功能一、信息录入
    {
    	struct student *head;	//定义“头指针” 
    	struct student *p,*p1;
    	p = p1 = (struct student *)malloc(sizeof(struct student));	//在内存动态存储区里分配struct student*类型,
    																//大小为一个结构体的字节长度的连续空间 
    	FILE *fp;	
    	char filename[50];		//定义字符串数组用来保存文件名称 
    	
    	printf("请输入文件名称\n");
    	gets(filename); 
    	fp = fopen(filename,"r");		//以只读模式打开文本文件 
    	if((fp =fopen(filename,"r"))==NULL)		//判断文件是否存在并做出选择 
    	{
    		printf("can't open\n");
    		getchar();
    		exit(0);
    	}
    	fscanf(fp,"%s	%d	%lf	%lf	%lf",p->name,&p->stunum,&p->score1,&p->score2,&p->score3); //写入文件的数据 
    	p->sumscore = p->score1 + p->score2 + p->score3;
    	
    	head = NULL;	//开始建立动态链表 
    
    	while(p->name[0] != '0')
    	{
    		
    	
    		if(head == NULL)	//判断链表是否为空 
    		{
    			head = p;
    		}
    		else
    		{
    			p1 -> next = p;
    		}
    		p1 = p;
    		p = (struct student*)malloc(sizeof(struct student));	//为下一结点开辟空间 
    		fscanf(fp,"%s	%d	%lf	%lf	%lf",p->name,&p->stunum,&p->score1,&p->score2,&p->score3);	//写入数据 
    		p->sumscore = p->score1 + p->score2 + p->score3;
    		
    	}
    	fclose(fp) ;
    	p1 -> next = NULL;	//链表结束,令最后的结点不再接入链表中 
    	printf("信息已录入\n"); 
    	system("pause");	//暂停 
    	system("cls");	//清屏 
    	return(head);
    
    }
    
    void print(struct student * head)		//功能二、成绩显示 
    {struct student * p;
    	double sum;
        printf("\n姓名\t学号\t\t平时成绩\t作业成绩\t考试成绩\n");
        p=head;
        if(head!=NULL)
        do
        {
    		printf("%s\t%d\t%0.1lf\t\t%0.1lf\t\t%0.1lf\n",p->name,p->stunum,p->score1,p->score2,p->score3);
            p=p->next;
        }while(p!=NULL);
        system("pause");
    	system("cls");
        
    }
    
    struct student * searchsystem(struct student* head)		//功能三、姓名查找 
    {
    	char Searname[25];
    	printf("请输入学生姓名\n");
    	scanf("%s",Searname);
        struct student* pMove = head;
        if (pMove == NULL)
            return NULL ;
        while ( strcmp(pMove->name,Searname)!=0 ) //字符串比较函数 
        {
         pMove = pMove->next;
        }
        printf("\n姓名\t学号\t\t平时成绩\t作业成绩\t考试成绩\n");
    	printf("%s\t%d\t%0.1lf\t\t%0.1lf\t\t%0.1lf\n",pMove->name,pMove->stunum,pMove->score1,pMove->score2,pMove->score3);
    	system("pause");
    	system("cls");
    }
    
    
    //8.删除学生信息
     struct student *DeleteStudent(struct student* head) 
    {
    	
    	struct student * p,*pbefore;
    	int searchnum;
    	printf("请输入要删除学生信息的学号:\n");//先把文件中的数据读取到链表
    	scanf("%d",&searchnum);
        p = head;
        while(p!=NULL)
        {
        	if(searchnum==p->stunum)
        	{
        		if(p==head)
        		{
        			head = p ->next;
    			}
    			else if(p->next==NULL)
    			{
    				p = pbefore;
    				p -> next = NULL;
    			}
    			else
    			{
    				pbefore -> next = p->next;
    			}
    			printf("删除成功\n");
    		}
    		pbefore = p;
    		p = p -> next;
    	}
    	system("pause");
    	system("cls");
    
    
    }
    /*按总成绩排序*/
    struct student* Listsort(struct student* head) 
    {  
    	void print(struct student * head);
        struct student *pfirst;       
        struct student *ptail;        
        struct student *pminBefore;    
        struct student *pmin;          
        struct student *p;             
    
        pfirst = NULL;  
        while (head != NULL)          
        {  
         
            for (p = head, pmin = head; p->next != NULL; p = p->next)   
            {  
                if (p->next->sumscore < pmin->sumscore)   
                {  
                    pminBefore = p;            
                    pmin       = p->next;      
                }  
            }  
    
         
            if (pfirst == NULL)      
            {  
                pfirst = pmin;       
                ptail  = pmin;        
            }  
            else                      
            {  
                ptail->next = pmin;   
                ptail = pmin;        
            }  
    
           
            if (pmin == head)          
            {  
                head = head->next;    
            }  
            else   
            {  
                pminBefore->next = pmin->next;  
            }  
        }  
    
        if (pfirst != NULL)       
        {  
            ptail->next = head;   
        }  
        head = pfirst;
    	print(head); 
    	system("pause");
    	system("cls");
    	return head; 
    	
    }
    
    展开全文
  • C语言基于单链表学生管理系统,C语言项目,C语言文件操作。
  • C++ 基于单链表学生管理系统

    千次阅读 2020-10-07 16:12:07
    / 数据结构_课程设计_学生管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 /*原作者:苏格扯底 *首次编写时间:2020年10月5日 * 完成时间:2020年10月7日 * * */ #include <iostream>...

    这个是最基本的系统

    具备基本的增改删查,还有打印显示,非常原始,后期会不定期更新~~~

    话不多说,直接上代码:

    / 数据结构_课程设计_学生管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    /*原作者:苏格扯底
    *首次编写时间:2020年10月5日
    *    完成时间:2020年10月7日  
    *
    *
    */
    
    #include <iostream>
    #include <iomanip>
    #define I 0 //用于初始阶段指2录入单一学科分数
    
    using namespace std;
    
    typedef struct file {
    
        string name;//姓名
        int num;//学号
        float score[10]; //分数(这里分数可以有不同学科)
        file* next;
    
     }file;
    
    class cla//班级
    {
    public:
    	cla();
        cla(string );//班级名称
    	~cla();
        //更改班级名称
        void changeclaname(string);
        /*创建学生列表*/
        void createn(int);
        //打印学生列表
        void print(); 
        //插入新的学生信息
        void insertx(string, int, float); 
        //查找。输入姓名和学号,并返回所在节点
        int searchx(string, int, file& s);
        //查找。输入姓名和学号
        int searchx(string xname, int xnum);
        //删除,输入姓名和学号
        void deletex(string , int);
        //查找重复
        void derepeat();  
        //计算平均分
        float averagescore();
    private:
        file* head;//头节点
        string classname;//班级名称
        int stunum;//学生人数
        int totalscore[10];//全部分数之和,用于计算平均分
    };
    
    cla::cla()
    {
        head = new file;
        head->next = NULL;
        this->stunum = 0;
        this->classname = "网络工程1班(默认设定班级)";
        this->totalscore[I] = 0;
    }
    
    cla::cla(string classname) //给班级命名
    {
        head = new file;
        this->classname = classname;
        this->stunum = 0;
        head->next = NULL;
        this->totalscore[I] = 0;
    }
    
    cla::~cla()
    {
        delete head;
    }
    
    void cla::changeclaname(string classname)
    {
        this->classname = classname;
    }
    
    void cla::createn(int n)//共插入i个学生
    {
        file*s ,* p = head;
        for (int i = 0; i < n; i++)
        {
            //对单个学生进行录入信息
            s = new file;
            cout << "请输入第" << i + 1 << "个人的姓名" << endl;
            cin >> s->name;
    
            cout << "请输入第" << i + 1 << "个人的学号" << endl;
            cin >> s->num;
    
            cout << "请输入第" << i + 1 << "个人的分数" << endl;
            cin >> s->score[I];
            this->totalscore[I] += s->score[I]; //全体学生分数增加
    
            cout << "第" << i + 1 << "个人输入完成\a" << endl << endl;
            
            s->next = p->next;
            p->next = s;
            p = s;
            this->stunum++; //学生人数+1
        }
    }
    
    void cla::print()
    {  
        cout << endl;
        cout<< right << setw(16) << "班级名称:" << this->classname << endl;
        cout<< right << setw(16) << "班级人数:" << this->stunum << endl;
        //第一行输出:编号|姓名|学号|分数
        cout << left << setw(4) << "编号" << setw(12) << "|姓名" << setw(12) << "|学号" << setw(10) << "|分数" << endl;
    
        file* p = this->head->next;
        int i = 1;
        while (p)
        {   //之后顺次输出:编号|姓名|学号|分数
            cout << left << setw(4) << i++ << setw(12) << "|"+ p->name <<  "|"<<setw(11) << p->num << "|"<< setw(9) << p->score[I] << endl;
            p = p->next;
        }
        cout << left << setw(28)<< "均分|——————————" << "|" << setw(9) << this->averagescore() << endl;
    }
    
    void cla::insertx(string xname, int xnum, float xscore)
    {
        file* s, * p = head;
        
            s = new file;
            s->name = xname;
            s->num = xnum;
            s->score[I] = xscore;
            this->totalscore[I] += s->score[I]; //全体学生分数增加
            this->stunum++; //学生人数+1
    
            s->next = p->next;
            p->next = s;
            p = s;
     }
    
    
    int cla::searchx(string xname, int xnum)
    {
        file* p = head->next;
        while (p)
        {
            if (xnum == p->num)
            {
                if (xname == p->name)
                {
                    return 1; //成功找到
                }
    
                return -1;  //错误,学号重复
            }
            p = p->next;
        }
        return 0; //没有查询到该学生信息
    }
    
    
    int cla::searchx(string xname, int xnum, file& s) //函数重载
    {
        file* p = head->next;
        while (p)
        {
            if (xnum == p->num)
            {
                if (xname == p->name)
                {
                    return 1; //成功找到
                    s = *p;
                }
    
                return -1; //错误,学号重复
            }
            p = p->next;
        }
        return 0; //没有查询到该学生信息
    }
    void cla::deletex(string xname, int xnum)
    {
        file* p = head,*s = p->next;
        while (s)
        {
            if (xnum == s->num)
            {
                if (xname == s->name)
                {
                    p->next = s->next;
                    delete s;
                    return;
                }
                cout << endl << "出错,学号与姓名不符" << endl;
                return;
            }
            p = s;
            s = p->next;
        }
        cout << "没有查找到相关学生信息" << endl;
    }
    
    void cla::derepeat()
    {
    }
    
    float cla::averagescore()
    {
        return this->totalscore[I]/this->stunum;
    }
    
    int main()
    {
        cla clas("对外贸易一班");
        clas.createn(1);
        clas.print();
        clas.insertx("王五", 2, 100);
        clas.print();
        clas.insertx("李四", 88, 100);
        clas.print();
        cout << clas.searchx("李四", 88);
        clas.deletex("赵六", 88);
    }
    
    展开全文
  • 基于单链表学生信息管理系统源代码
  • 数据结构—单链表实现学生信息管理系统

    万次阅读 多人点赞 2019-06-19 13:50:22
    //初始化(带头结点的单链表) int InitList(LinkList &L) { L = new LNode; L->next = NULL; return 1; } //判断链表是否为空 int ListEmpty(LinkList L) { if (L->next == NULL) { return 1; // 链表为空...
  • 单链表实现的学生管理系统

    万次阅读 多人点赞 2018-04-23 00:06:07
    这个学生管理系统是通过单链表实现的,这个管理系统是为了让我们更好得对链表进行操作。#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;...
  • 5、查找学生信息 6、修改系统密码 7、获取学生人数 8、统计分数信息 9、重置学生账号 0、退出管理信息 大一上用于熟练C语言语法,是程序设计实践期末的大作业。所以代码方面还有许多不尽人意的地方。 结构体 ...
  • void PrintList(Node* headNode) { Node*pMove = headNode->next; //涉及到数据的处理 printf("学号\t姓名\t成绩\n"); while (pMove) ... printf("共有%d名学生\n", count); printf("\n"); }
  • 插入删除显示长度和融合两个学生

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,815
精华内容 1,126
关键字:

单链表学生管理系统