精华内容
下载资源
问答
  • 创建学生成绩单链表

    千次阅读 2017-10-12 08:39:01
    建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。 三、实验步骤 1、依据实验内容分别说明实验程序中用...

    一、实验目的

    巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。


    二、实验内容

    建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。


    三、实验步骤

    1、依据实验内容分别说明实验程序中用到的数据类型的定义:

    SeqList(T score[],int n);        //构造函数,建立一个长度为n的顺序表  
    ~SeqList(){}                       //析构函数  
    void insert(int i,T x);          //插入操作,在位置i插入元素x  
    T Delete(int i);                   //在位置i删除对应元素  
    T get(int i);                         //按位查找,找位置i的元素  
    int locate(T x);                   //按值查找,找数值为x的元素  
    void print();                        //遍历操作,按序号依次输出各元素

    2、相关操作的算法表达

    在代码中设定元素为int型,有5个元素。定义顺序表的数据类型——单链表类LinkList,包括插入、删除、查找、输出等基本操作。

    插入操作:1.工作指针p初始化;

                       2.查找第i-1个结点并使工作指针p指向该节点;

                       3.若查找不成功,说明插入位置不合理,抛出插入位置非法;

                          否则,3.1 生成一个元素值为x的新结点s;

                                    3.2  将新结点插入到结点p之后;

    删除操作:1.工作指针p初始化,累加器count初始化;

                    2.查找第i-1个结点并使工作指针p指向该节点

                    3.若p不存在或p的后继结点不存在,抛出插入位置非法

                       否则,3.1 暂存被删结点和被删元素值;

                                 3.2  摘链,将结点p的后继结点从链表上摘下;

                                 3.3  释放被删结点

                                 3.4  返回被删元素值

    查找操作:(1)按位查找

                     1.工作指针p初始化,累加器count初始化;

                     2.从头指针出发顺next域逐个结点往下搜索直到某个结点,判断是否为第i个结点。

                     3. 若是,则查找成功;否则将工作指针p后移;

                    (2)按值查找

                     1.工作指针p初始化,累加器count初始化

                     2.对单链表中各元素依次进行比较。查找成功则返回元素序号;否则,返回0表示查找失败;

    输出操作:1.工作指针p初始化;

                    2.重复执行下述操作,直到p为空:

                        2.1 输出结点p的数据域;

                        2.2工作结点p后移

    源代码:#include<iostream>  
    using namespace std;  
      
    template <typename T>  
    struct Node    
    {    
        T data;    
        Node<T> *next;    
    };  
      
    /*建立一个由n个学生成绩的顺序表,实现数据的对表进行插入、删除、查找等操作。分别输出结果。*/  
      
    template <typename T>  
    class LinkList{  
        public:  
            LinkList(); //无参构造函数,建立只有头结点的空链表  
      
            LinkList(T score[],int n);    //构造函数  
      
            ~LinkList()                 //析构函数  
            {  
                Node<T> *q;  
                while(first!=NULL)  
                {  
                    q=first;  
                    first=first->next;  
                    delete q;  
                }  
            }  
      
            void insert(int i,T x); //插入操作,在位置i插入元素x  
      
            T Delete(int i);//删除操作,删除位置i的元素  
      
            T get(int i);//按位查找  
      
            int locate(T x); //按值查找  
      
            void print();//输出操作  
        private:  
            Node<T> *first; //头指针    
    };  
      
    template<class T>    
    LinkList<T>::LinkList()    
    {    
        first = new Node<T>;    
        first->next = NULL;    
    }  
      
    template<typename T>    
    LinkList<T>::LinkList(T score[],int n)  
    {  
        Node<T>*s;  
        first=new Node<T>; first->next=NULL; //初始化一个空链表  
        for(int i=0;i<n;i++)  
        {  
            s=new Node<T>;s->data=score[i];  //为每个数组元素建立一个结点  
            s->next=first->next;first->next=s;  //将结点s插入头结点之后  
        }  
    }  
      
    template<typename T>    
    void LinkList<T>::insert(int i,T x)  
    {  
        Node<T>*p,*s;int count;  
        p=first;count=0;  
        while(p!=NULL&&count<i-1)  
        {  
            p=p->next;  
            count++;  
        }  
        if(p==NULL)throw"位置非法";  
        else{  
            s=new Node<T>;s->data=x;  
            s->next=p->next;p->next=s;  
        }  
    }  
      
      
    template<typename T>    
    T LinkList<T>::Delete(int i)  
            {  
                Node<T> *q,*p; T x; int count;  
                p=first;count=0; //注意P指针要指向头结点  
                while(p!=NULL&&count<i-1)   //此操作目的是找到i-1个结点  
                {  
                    p=p->next;  
                    count++;  
                }  
                if(p==NULL||p->next==NULL)throw"位置";  //结点p不存在或p后继结点不存在  
                else{  
                    q=p->next;x=q->data;  //暂存被删结点  
                    p->next=q->next;  
                    delete q;  
                    return x;  
                }  
            }  
      
    template<typename T>    
    T LinkList<T>::get(int i)  
            {  
                Node<T>*p;int count;  
                p=first->next;count=1;  
                while(p!=NULL&&count<i)  
                {p=p->next;count++;}  
                if(p==NULL)throw"位置非法";  
                else return p->data;  
            }  
      
    template<typename T>    
    int LinkList<T>::locate(T x)  
            {  
                Node<T>*p;int count;  
                p=first->next;count=1;  
                while(p!=NULL)  
                {  
                    if(p->data==x)return count;  
                    p=p->next;  
                    count++;  
                }  
                return 0;  
            }  
      
    template<typename T>    
    void LinkList<T>::print()  
            {  
                Node<T>*p;  
                p=first->next;  
                while(p!=NULL)  
                {cout<<p->data<<"  ";;  
                p=p->next;  
                }  
            }  
      
    void main()  
    {  
        int score[6]={62,58,80,77,85,76};  
        LinkList<int>student(score,6);    //创建对象  
        cout<<"              学生离散数学成绩"<<endl;    
        student.print();    
        cout<<endl<<endl<<"在位置5插入成绩67,结果如下:"<<endl;    
        student.insert(5,67);    
        student.print();    
        cout<<endl<<endl<<"在位置2删除成绩为:"<<student.Delete(2)<<endl<<"删除后结果如下:"<<endl;    
        student.print();    
        cout<<endl<<endl<<"位置3的成绩为:"<<student.get(3)<<endl;    
        cout<<endl<<endl<<"成绩77所在位置为:"<<student.locate(77)<<endl;  
    }  
    展开全文
  • 5.按学号或者姓名查找学生成绩单 6.按总成绩进行排序,并保存到新的文件中 7.合并两个成绩单 8.要有菜单显示 功能模块 1.定义学生信息结构体和单链表结构体 2.头插法建立学生成绩单 3.将成绩单导入到文件...

    功能要求

    1.使用单链表实现

    2.学生成绩应包含4科成绩和总成绩(C语言、数据结构、高数、英语)

    3.建立学生成绩单并保存到文件中(直接从控制台获取)

    4.打印学生成绩单

    5.按学号或者姓名查找学生成绩单

    6.删除指定学生的信息

    7.修改学生信息

    8.要有菜单显示

    功能模块 

    1.定义学生信息结构体和单链表结构体

    typedef struct student
    {
    	char name[20];//姓名
    	char clas[20];//班级
    	char stuNumber[20];//学号
    	int grade[5];//4科成绩和总成绩
    }student;
    typedef struct stuNode
    {
    	student data;
    	struct stuNode *next;
    }stuNode;

    2.头插法建立学生成绩单

    void createStudentInfo(stuNode **head)
    {
    	stuNode *newNode = (stuNode*)malloc(sizeof(stuNode));
    	printf("依次输入姓名 班级 学号 C语言 数据结构 高数 英语成绩:\n");
    	scanf("%s", newNode->data.name);
    	scanf("%s", newNode->data.clas);
    	scanf("%s",newNode->data.stuNumber);
    	scanf("%d %d %d %d", &(newNode->data.grade[0]), &(newNode->data.grade[1]), &(newNode->data.grade[2]), &(newNode->data.grade[3]));
    	newNode->data.grade[4] = newNode->data.grade[0] + newNode->data.grade[1] + newNode->data.grade[2] + newNode->data.grade[3];
    	if (*head == NULL)
    	{
    		newNode->next = NULL;
    		*head = newNode;
    	}
    	else
    	{
    		newNode->next = *head;
    		(*head) = newNode;
    	}
    }

    3.将成绩单导入到文件stu1中

    void printToFile(stuNode *head)
    {
    	stuNode *cur = head;
    	FILE *pfile;
    	pfile = fopen("C:\\Users\\user\\Desktop\\stu1.txt", "w");//以只写的方式打开一个文件stu1.txt
    	if (pfile == NULL)
    	{
    		printf("失败\n");
    		exit(-1);
    	}
    	while (cur)
    	{
    		fputs(cur->data.name, pfile);//项文件中写入字符串(name)
    		fputc('  ', pfile);//空格间隔开所输入的信息
    		fputs(cur->data.clas, pfile);
    		fputc('  ', pfile);
    		fputs(cur->data.stuNumber, pfile);
    		putc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[0]);//格式化写入文件
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[1]);
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[2]);
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[3]);
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[4]);
    		fputc('\n', pfile);
    		cur = cur->next;
    	}
    	fclose(pfile);
    
    }

    4.打印学生成绩单

    void print(stuNode *head)
    {
    	stuNode *cur = head;
    	while (cur)
    	{
    		printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
    		cur = cur->next;
    	}
    }
    

    5.查找学生成绩(按照学号查找)

    void search(stuNode *head,char *stuNumber)
    {
    	stuNode *cur = head;
    	while (cur)
    	{
    		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
    		{
    			printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
    			return;
    		}
    		cur = cur->next;
    	}
    	printf("查无此人!\n");
    }

    6.删除指定学生的信息

    void delete(stuNode *head, char *stuNumber)
    {
    	stuNode *preCur = head;
    	stuNode *cur = head;
    	while (cur)
    	{
    		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
    		{
    			preCur->next = cur->next;
    			free(cur);
    			return;
    		}
    		else
    		{
    			preCur = cur;
    			cur = cur->next;
    		}
    	}
    	printf("查无此人!\n");
    }

    7.修改指定学生的信息

    void update(stuNode *head, char *stuNumber)
    {
    	stuNode *cur = head;
    	while (cur)
    	{
    		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
    		{
    			printf("请输入该学生的信息:\n");
    			scanf("%s", cur->data.name);
    			scanf("%s", cur->data.clas);
    			scanf("%s", cur->data.stuNumber);
    			scanf("%d %d %d %d", &(cur->data.grade[0]), &(cur->data.grade[1]), &(cur->data.grade[2]), &(cur->data.grade[3]));
    			cur->data.grade[4] = cur->data.grade[0] + cur->data.grade[1] + cur->data.grade[2] + cur->data.grade[3];
    
    			//更新文件
    			printToFile(head);
    			return;
    		}
    		else
    		{
    			cur = cur->next;
    		}
    	}
    	printf("查无此人\n");
    }

    8.菜单显示

     

    c语言程序

    .h文件

    #include<stdio.h>
    #include<malloc.h>
    #include<assert.h>
    #include<string.h>
    
    typedef struct student
    {
    	char name[20];//姓名
    	char clas[20];//班级
    	char stuNumber[20];//学号
    	int grade[5];//4科成绩和总成绩
    }student;
    typedef struct stuNode
    {
    	student data;
    	struct stuNode *next;
    }stuNode;
    
    void createStudentInfo(stuNode **head);
    void print(stuNode *head);
    void printToFile(stuNode *head);
    void search(stuNode *head, char *stuNumber);
    void delete(stuNode *head,char *stuNumber);
    void update(stuNode *head,char *stuNumber);
    void menue();

    .c文件

    #include"grade.h"
    void createStudentInfo(stuNode **head)
    {
    	stuNode *newNode = (stuNode*)malloc(sizeof(stuNode));
    	printf("依次输入姓名 班级 学号 C语言 数据结构 高数 英语成绩:\n");
    	scanf("%s", newNode->data.name);
    	scanf("%s", newNode->data.clas);
    	scanf("%s",newNode->data.stuNumber);
    	scanf("%d %d %d %d", &(newNode->data.grade[0]), &(newNode->data.grade[1]), &(newNode->data.grade[2]), &(newNode->data.grade[3]));
    	newNode->data.grade[4] = newNode->data.grade[0] + newNode->data.grade[1] + newNode->data.grade[2] + newNode->data.grade[3];
    	if (*head == NULL)
    	{
    		newNode->next = NULL;
    		*head = newNode;
    	}
    	else
    	{
    		newNode->next = *head;
    		(*head) = newNode;
    	}
    }
    
    void print(stuNode *head)
    {
    	stuNode *cur = head;
    	while (cur)
    	{
    		printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
    		cur = cur->next;
    	}
    }
    
    void printToFile(stuNode *head)
    {
    	stuNode *cur = head;
    	FILE *pfile;
    	pfile = fopen("C:\\Users\\user\\Desktop\\stu1.txt", "w");//以只写的方式打开一个文件stu1.txt
    	if (pfile == NULL)
    	{
    		printf("失败\n");
    		exit(-1);
    	}
    	while (cur)
    	{
    		fputs(cur->data.name, pfile);//项文件中写入字符串(name)
    		fputc('  ', pfile);//空格间隔开所输入的信息
    		fputs(cur->data.clas, pfile);
    		fputc('  ', pfile);
    		fputs(cur->data.stuNumber, pfile);
    		putc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[0]);//格式化写入文件
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[1]);
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[2]);
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[3]);
    		fputc('  ', pfile);
    		fprintf(pfile, "%d", cur->data.grade[4]);
    		fputc('\n', pfile);
    		cur = cur->next;
    	}
    	fclose(pfile);
    
    }
    
    void search(stuNode *head,char *stuNumber)
    {
    	stuNode *cur = head;
    	while (cur)
    	{
    		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
    		{
    			printf("%s %s %s %d %d %d %d %d\n", cur->data.name, cur->data.clas, cur->data.stuNumber, cur->data.grade[0], cur->data.grade[1], cur->data.grade[2], cur->data.grade[3], cur->data.grade[4], cur->data.grade[5]);
    			return;
    		}
    		cur = cur->next;
    	}
    	printf("查无此人!\n");
    }
    
    void delete(stuNode *head, char *stuNumber)
    {
    	stuNode *preCur = head;
    	stuNode *cur = head;
    	while (cur)
    	{
    		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
    		{
    			preCur->next = cur->next;
    			free(cur);
    			return;
    		}
    		else
    		{
    			preCur = cur;
    			cur = cur->next;
    		}
    	}
    	printf("查无此人!\n");
    }
    
    void update(stuNode *head, char *stuNumber)
    {
    	stuNode *cur = head;
    	while (cur)
    	{
    		if (strcmp(cur->data.stuNumber, stuNumber) == 0)
    		{
    			printf("请输入该学生的信息:\n");
    			scanf("%s", cur->data.name);
    			scanf("%s", cur->data.clas);
    			scanf("%s", cur->data.stuNumber);
    			scanf("%d %d %d %d", &(cur->data.grade[0]), &(cur->data.grade[1]), &(cur->data.grade[2]), &(cur->data.grade[3]));
    			cur->data.grade[4] = cur->data.grade[0] + cur->data.grade[1] + cur->data.grade[2] + cur->data.grade[3];
    
    			//更新文件
    			printToFile(head);
    			return;
    		}
    		else
    		{
    			cur = cur->next;
    		}
    	}
    	printf("查无此人\n");
    }
    
    void menue()
    {
    	printf("------------------------------------------\n");
    	printf("            学生成绩管理系统\n");
    	printf("1.建立学生成绩单              2.保存到文件\n");
    	printf("3.打印                        4.查找\n");
    	printf("5.删除                        6.修改\n");
    	printf("0.退出                              \n");
    	printf("------------------------------------------\n");
    	printf("请选择:>");
    }

    主函数

    #include"grade.h"
    
    int main()
    {
    	stuNode *head = NULL;
    	char *stuNumber = NULL;
    	int choice;
    	do
    	{
    		menue();
    		scanf("%d", &choice);
    		switch (choice)
    		{
    		case 0:
    			printf("退出系统,欢迎下次使用\n");
    			break;
    		case 1:
    			createStudentInfo(&head);
    			break;
    		case 2:
    			printToFile(head);
    			break;
    		case 3:
    			print(head);
    			break;
    		case 4:
    			printf("请输入学号进行查找:>");
    			scanf("%s",stuNumber);
    			search(head,stuNumber);
    			break;
    		case 5:
    			printf("请输入学号进行删除:>");
    			scanf("%s", stuNumber);
    			delete(head, stuNumber);
    			break;
    		case 6:
    			printf("请输入学号进行修改:>");
    			scanf("%s", stuNumber);
    			update(head, stuNumber);
    			break;
    		default:printf("输入有误,请重新输入\n");
    			break;
    		}
    	} while (choice);
    	return 0;
    }

     

    展开全文
  • 在CClass类中设计包括能够求解最高成绩、最低成绩和平均成绩以及通过学号查找并输出某个学生全部信息(例如Seek())等功能在内的成员函数; ⑤ 构造三十个学生的数据,每个学生都有三门课程成绩,输出并显示这些数据...
  • 学生成绩管理系统

    2012-06-27 11:16:12
    学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生注册、考试成绩的录入及修改、成绩的统计分析等等。设计一个系统实现对学生成绩的管理。 要求系统应具有以下基本功能: (1)学生注册登记; (2)增加...
  • 学生成绩管理

    2008-05-30 20:04:14
    <br>【实现提示】 <br>本题实质是建立学生成绩单链表,每条信息由学号、姓名与成绩组成,即链表中每个结点由4个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。要求完成的四项功能可写成四...
  • 学生成绩汇总python

    2021-05-27 22:44:18
    1. 将其中、期末的补充成绩单合并到主成绩单中,成绩不一致的以补充材料为准; 2.使用空的Input函数接收键盘输入一个纯小数赋值给rate,确定总评成绩中 期中考试分数的占比,然后以此为依据...
  • 学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生注册、考试成绩的录入及修改、成绩的统计分析等等。设计一个系统实现对学生成绩的管理。 要求系统应具有以下基本功能: (1)学生注册登记; (2)增加...
  • 简单的学生成绩管理系统

    千次阅读 2011-10-28 09:30:35
    1、开发一个学生成绩管理系统,首先定义一个学生信息类,用来表示单个学生的姓名和成绩,然后利用数组管理一个班级的所有学生的信息,并实现相应的输入、输出、查找、排序等功能。   import java.io.*; impo

    实验3 (学生成绩管理系统)持有对象

    实验目的

    掌握Java中数组的基本概念。掌握Java的对象容器类库,能够运用对象容器类持有对象,从而表达实体的复杂属性。

    实验任务

    1、开发一个学生成绩管理系统,首先定义一个学生信息类,用来表示单个学生的姓名和成绩,然后利用数组管理一个班级的所有学生的信息,并实现相应的输入、输出、查找、排序等功能。

     

    import java.io.*;
    import java.util.Scanner;
    
    public class studentmanage {
    
    	public static class StudentInfo{
    		private String stdName;//学生姓名
    		private double score;  //学生成绩
    		
    		public StudentInfo(){}
    		
    		public StudentInfo(String name, double s){
    			this.stdName = name;
    			this.score = s;
    		}
    		
    		public String getStdName() {
    			return stdName;
    		}	
    		public void setStdName(String stdName){
    			this.stdName = stdName;
    		}
    
    		public double getScore() {
    			return score;
    		}
    		public void setScore(double score){
    			this.score = score;
    		}
    		
    		public void inputStdInfo(){
    			System.out.println("请输入学生信息:");
    			Scanner scanner = new Scanner(System.in);
    			System.out.print("姓名:");
    			stdName = scanner.nextLine();
    			System.out.print("成绩:");
    			score = scanner.nextDouble();
    		}
    		
    		public void outputStdInfo(){
    			System.out.print(this.stdName + ":" + this.score + "\n");
    		}
    	}
    
    	// 一个班级的学生成绩类
    	public static class ScoreManager{
    		// 全班同学的成绩
    		private StudentInfo[] stdScores;
    		
    		// 构造方法,参数s中记录了全班同学的成绩
    		public ScoreManager(int stdnum){
    			// 将参数s中的成绩清单复制到属性scores
    			stdScores = new StudentInfo[stdnum]; 
    			for (int index = 0; index < stdScores.length; index++){
    				stdScores[index] = new StudentInfo();
    			}
    		}
    		
    		//输入全班学生的信息
    		public void inputClassInfo(){
    			int index = 0; 
    			while (index < stdScores.length) {
    				stdScores[index].inputStdInfo();
    				if (stdScores[index].getScore()<0|| stdScores[index].getScore()>100) {
    					System.out.println("输入的成绩不在合理范围之内!"); 
    					continue;
    				}
    				index = index + 1;
    			}
    		}
    		
    		// 返回全班的学生信息清单
    		public StudentInfo[] getClassInfo(){ 
    			return stdScores;
    		}
    		
    		// 取第sno位学生的信息,sno超出范围则返回负数
    		public StudentInfo getScore(int sno){ 
    			if (sno < 1 || sno > stdScores.length) 
    				return null; 
    			
    			return stdScores[sno-1];
    		}
    
    		// 查找有成绩为score的学生则返回true,否则返回false
    		public StudentInfo findByScore(double score){
    			for (int index = 0; index < stdScores.length; index++) {
    				if (stdScores[index].getScore() == score)
    					return stdScores[index];
    			}
    			return null;
    		}
    
    		// 统计low至high之间成绩段的学生人数,分数low和high包括在内
    		public int count(double low, double high){
    			//保证low<high
    			if(low > high){
    				double temp = low;
    				low = high;
    				high = temp;
    			}
    			int result = 0;
    			for (int index = 0; index < stdScores.length; index++) {
    				if (stdScores[index].getScore() >= low 
    						&& stdScores[index].getScore() <= high)
    					result++;
    			}
    			return result;
    		}
    		
    		// 返回全班的学生人数
    		public int countAll(){
    			return stdScores.length;
    		}
    		
    		// 将学生成绩从高分到低分排序(采用简单的冒泡排序算法)
    		public void sort(){
    			// 从头到尾扫描整个数组,逐段将数据冒泡排序
    			for (int index = 0; index < stdScores.length - 1; index++) {
    				// 将index到scores.length - 1中的最大数冒泡到最上面(即最左)
    				for (int ptr = stdScores.length - 1; ptr > index; ptr--) {
    					// 如果位置ptr的下一元素比ptr位置的元素更大则交换两个元素
    					if (stdScores[ptr].getScore() > stdScores[ptr - 1].getScore()) {
    						StudentInfo temp = stdScores[ptr];
    						stdScores[ptr] = stdScores[ptr-1];
    						stdScores[ptr-1] = temp;
    					}
    				}
    			}
    		}
    		
    		
    		// 输入全班学生的人数,不合法则返回0 
    		public static   int inputNumber(){ 
    			int num;
    			System.out.print("请输入全班学生的人数:"); 
    			try {
    				BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
    				String inputLine = in.readLine();
    				num = Integer.valueOf(inputLine).intValue();
    			} catch (Exception exc) {
    				System.out.println("学生人数输入错误!"); 
    				return 0;
    			}
    			if (num <= 0 || num > 1000) {
    				System.out.println("输入的学生人数不合理!"); 
    				return 0;
    			}
    			return num;
    		}
    		
    		// 输出全班学生的成绩清单
    		public void output(){
    			System.out.println("学生成绩信息为:");
    			for (int index = 0; index < stdScores.length; index++) {
    				stdScores[index].outputStdInfo();
    			}
    		}
    		
    		// 主程序
    		public static void main(String[] args){
    			// 提示用户输入全班学生人数
    			int stdNum = ScoreManager.inputNumber();
    			// 创建学生成绩清单数组并输入全班学生的成绩		
    			ScoreManager sManager = new ScoreManager(stdNum);
    			sManager.inputClassInfo();		
    			// 显示第5位同学的成绩
    			System.out.println("第5位同学的成绩为:" + sManager.getScore(5));
    			// 查找是否有75分的成绩
    			System.out.println("75分的成绩:" + sManager.findByScore(75));
    			// 统计不合格的人数与优秀的人数
    			System.out.println("不合格" + sManager.count(0, 59) + "人");
    			System.out.println("优秀" + sManager.count(90, 100) + "人");
    			// 将成绩排序后输出
    			System.out.println("排序后的学生成绩清单为:");
    			sManager.sort();
    			sManager.output();
    		}
    	}
    
    }
    
    


    展开全文
  • c++学生成绩管理系统

    2009-05-16 18:42:47
    编写一个学生成绩登记程序 每个学生每期有三门课程,将姓名、学号、和三门成绩存放在一个学生类中实现以下操作: 1录小学生信息以及学生成绩 2输出学生数据,输出所有学生 3显示单个学生各成绩 4计算全班...
  • 6.查找学生成绩(按照学号) 7.打印学生成绩单 C语言代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> s..

    要求 

    1.使用单链表实现

    2.建立学生信息链表并保存到文件中

    3.按照总成绩进行排序

    4.打印需要补考的学生的信息

    5.合并两个成绩单到一个新的成绩单中

    6.查找学生成绩(按照学号)

    7.打印学生成绩单

    C语言代码 

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    #include<malloc.h>
    #include<stdlib.h>
    #include<string.h>
    struct student1//学生信息结构体
    {
    	char name[10];//姓名
    	int  num;//学号
    	int  grade[4];//语文 数学 英语
    };
    struct student2//单链表节点定义
    {
    	struct student1 data;//单链表数据域,用于存储学生信息。
    	struct student2 *next;//指针域
    };
    /* struct student3
    {
    char name[10];//姓名
    int  num;//学号
    int  grade[4];//语文 数学 英语
    };
    struct student4//单链表节点定义
    {
    struct student3 data1;//单链表数据域,用于存储学生信息。
    struct student3 data2;//指针域
    };*/
    struct student2 *creat(struct student2 *head)//建立单链表,输入学生信息
    {
    	struct student2 *p1, *p2;
    	int a = 0, b = 1, c;
    	char str1[15] = { "studenta.txt" };
    	char str2[15] = { "studentb.txt" };
    	char ch = ' ';
    	FILE *fp;
    	p1 = p2 = (struct student2*)malloc(sizeof(struct student2));//申请空间
    	while (a <= 0)
    	{
    		printf("请输入您要输入的学生人数:");
    		scanf("%d", &a);
    		if (a <= 0)
    			printf("输入有误,请重新输入!\n");
    	}
    	printf("1.studenta.txt文件\n2.studentb.txt\n");
    	printf("请选择您要保存的文件:");
    	scanf("%d", &c);
    	{
    		if (c == 1)
    			fp = fopen(str1, "w+");
    		else if (c == 2)
    			fp = fopen(str2, "w+");
    	}
    	printf("请输入第%d学生的姓名:", b);
    	scanf("%s", &(p1->data.name));
    	fputs((p1->data.name), fp);//将字符串读入文件
    	fputc(ch, fp);//向文件写入一个空格字符
    	printf("请输入第%d个学生的学号:", b);
    	scanf("%d", &(p1->data.num));
    	fprintf(fp, "%d", (p1->data.num));
    	fputc(ch, fp);
    	printf("请输入第%d学生的语文成绩:", b);
    	scanf("%d", &(p1->data.grade[0]));
    	fprintf(fp, "%d", (p1->data.grade[0]));
    	fputc(ch, fp);
    	printf("请输入第%d学生的数学成绩:", b);
    	scanf("%d", &(p1->data.grade[1]));
    	fprintf(fp, "%d", (p1->data.grade[1]));
    	fputc(ch, fp);
    	printf("请输入第%d学生的英语成绩:", b);
    	scanf("%d", &(p1->data.grade[2]));
    	fprintf(fp, "%d", (p1->data.grade[2]));
    	fputc(ch, fp);
    	(p1->data.grade[3]) = ((p1->data.grade[0]) + (p1->data.grade[1]) + (p1->data.grade[2]));
    	fprintf(fp, "%d", (p1->data.grade[3]));
    	fprintf(fp, "\n");
    	printf("%s的总成绩为:%d\n", (p1->data.name), (p1->data.grade[3]));
    	b++;
    	p1->next = NULL;
    	while (b <= (a + 1))
    	{
    		if (head == NULL)
    			head = p1;/*空表,接入表头*/
    		else
    			p2->next = p1;/*非空表,接到表尾*/
    		p2 = p1;
    		if (b != a + 1)
    		{
    			p1 = (struct student2*)malloc(sizeof(struct student2));
    			printf("请输入第%d学生的姓名:", b);
    			scanf("%s", &(p1->data.name));
    			fputs((p1->data.name), fp);//将字符串读入文件
    			fputc(ch, fp);//向文件写入一个空格
    			printf("请输入第%d个学生的学号:", b);
    			scanf("%d", &(p1->data.num));
    			fprintf(fp, "%d", (p1->data.num));
    			fputc(ch, fp);
    			printf("请输入第%d学生的语文成绩:", b);
    			scanf("%d", &(p1->data.grade[0]));
    			fprintf(fp, "%d", (p1->data.grade[0]));
    			fputc(ch, fp);
    			printf("请输入第%d学生的数学成绩:", b);
    			scanf("%d", &(p1->data.grade[1]));
    			fprintf(fp, "%d", (p1->data.grade[1]));
    			fputc(ch, fp);
    			printf("请输入第%d学生的英语成绩:", b);
    			scanf("%d", &(p1->data.grade[2]));
    			fprintf(fp, "%d", (p1->data.grade[2]));
    			fputc(ch, fp);
    			(p1->data.grade[3]) = ((p1->data.grade[0]) + (p1->data.grade[1]) + (p1->data.grade[2]));
    			fprintf(fp, "%d", (p1->data.grade[3]));
    			fprintf(fp, "\n");
    			printf("%s的总成绩为:%d\n", (p1->data.name), (p1->data.grade[3]));
    			p1->next = NULL;
    			b++;
    		}
    		else break;
    	}
    	fclose(fp);
    	return head;
    }
    
    void printLinkList(struct student2 *head)//输出学生信息
    {
    	struct student2 *temp;
    	temp = head;//取得链表的头指针
    	printf("姓名      学号  语文 数学 英语 总分\n");
    	while (temp != NULL)//只要是非空表
    	{
    		printf("%s          %d       %d          %d       %d        %d      \n", (temp->data.name), (temp->data.num), (temp->data.grade[0]), (temp->data.grade[1]), (temp->data.grade[2]), (temp->data.grade[3]));//输出链表节点的值
    		temp = temp->next;///跟踪链表增长
    	}
    }
    
    void find(struct student2 *head)
    {
    	int b;
    	struct student2 *p;
    	printf("请输入您要查找的学生的学号:");
    	scanf("%d", &b);
    	p = head;
    	while (p != NULL)
    	{
    		if (b == p->data.num)
    		{
    			printf("%s           %d       %d          %d       %d        %d      \n", (p->data.name), (p->data.num), (p->data.grade[0]), (p->data.grade[1]), (p->data.grade[2]), (p->data.grade[3]));//输出链表节点的值
    			break;
    		}
    		else
    			p = p->next;
    	}
    }
    
    
    void display(struct student2 *head)
    {
    	struct student2 *temp;
    	FILE *fp;
    	char ch = ' ';
    	fp = fopen("student4.txt", "w+");
    	temp = head;//取得链表的头指针
    	printf("姓名      学号  语文 数学 英语 总分\n");
    	while (temp != NULL)//只要是非空表
    	{
    		if (((temp->data.grade[0])<60) || ((temp->data.grade[1])<60) || ((temp->data.grade[2])<60))
    		{
    			printf("%s           %d       %d          %d       %d        %d      \n", (temp->data.name), (temp->data.num), (temp->data.grade[0]), (temp->data.grade[1]), (temp->data.grade[2]), (temp->data.grade[3]));//输出链表节点的值
    			fputs((temp->data.name), fp);//将字符串读入文件
    			fputc(ch, fp);//向文件写入一个空格
    
    			fprintf(fp, "%d", (temp->data.num));
    			fputc(ch, fp);
    			fprintf(fp, "%d", (temp->data.grade[0]));
    			fputc(ch, fp);
    			fprintf(fp, "%d", (temp->data.grade[1]));
    			fputc(ch, fp);
    			fprintf(fp, "%d", (temp->data.grade[2]));
    			fputc(ch, fp);
    			fprintf(fp, "%d", (temp->data.grade[3]));
    			fputc(ch, fp);
    
    		}
    		temp = temp->next;
    	}
    	fclose(fp);
    }
    
    void merge(struct student2 *head)
    {
    	char a, b;
    	FILE *fpA = fopen("studenta.txt ", "r "); //A文件
    	FILE *fpB = fopen("studentb.txt ", "r "); //B文件,两个作为输入文件,内容有序
    	FILE *fpout = fopen("studnetc.txt ", "w "); //输出文件,三个文件都在当前目录下
    	a = fgetc(fpA);
    	b = fgetc(fpB);
    	while (a != EOF && b != EOF) //循环读取并根据比较结果写文件,之后读取新的数据
    	{
    		if (a <b) //假设是升序,如果是降序使用 > 即可
    		{
    			fputc(a, fpout);
    			a = fgetc(fpA);
    		}
    		else
    		{
    			fputc(b, fpout);
    			b = fgetc(fpB);
    		}
    	}
    	while (a != EOF) //继续读取没有操作的数据
    	{
    		fputc(a, fpout);
    		a = fgetc(fpA);
    	}
    	while (b != EOF)
    	{
    		fputc(b, fpout);
    		b = fgetc(fpB);
    	}
    	fclose(fpA);
    	fclose(fpB);
    	fclose(fpout);
    	printf("合并成功,请在studentc文件中查看!\n");
    }
    void sort(struct student2 *head)
    {
    	struct student2 *newNode = (struct student2*)malloc(sizeof(struct student2));
    	newNode->next = NULL;
    	while (head)
    	{
    		struct student2 *current = head;
    		struct student2 *pre = head;
    		struct student2 *preMin = head;
    		struct student2 *min = head;
    		while (current)
    		{
    			if (current->data.grade[3] < min->data.grade[3])
    			{
    				preMin = pre;
    				min = current;
    			}
    			pre = current;
    			current = current->next;
    		}
    		if (min == head)
    		{
    			head = head->next;
    			min->next = newNode->next;
    			newNode->next = min;
    		}
    		else
    		{
    			preMin->next = min->next;
    			min->next = newNode->next;
    			newNode->next = min;
    		}
    	}
    	head = newNode->next;
    	free(newNode);
    	newNode = head;
    	while (newNode)
    	{
    		printf("%s %d %d %d %d %d\n",newNode->data.name,newNode->data.num,newNode->data.grade[0],newNode->data.grade[1],newNode->data.grade[2],newNode->data.grade[3]);
    		newNode = newNode->next;
    	}
    	
    }
    
    void main()
    {
    	int i = 0;
    	struct student2 *head = NULL;
    	struct student2 *creat();
    	void printLinkList();
    	printf(" -------------------------------------------------\n");
    	printf("|   ***欢迎使用西安工程大学学生成绩管理系统***    |\n");
    	printf("|                                                 |\n");
    	printf("|       1.建立学生成绩单                          |\n");
    	printf("|       2.显示学生成绩单                          |\n");
    	printf("|       3.查找学生成绩                            |\n");
    	printf("|       4.按总成绩进行排序并显示                  |\n");
    	printf("|       5.显示需要补考的学生信息并存入新文件4     |\n");
    	printf("|       6.合并学生成绩单1和2存入新的成绩单3中     |\n");
    	printf("|       7.退出系统                                |\n");
    	printf("|                                                 |\n");
    	printf(" -------------------------------------------------\n");
    	while (i != 6)
    	{
    		printf("请选择您需要的操作:");
    		scanf("%d", &i);
    		if (i <= 0 || i>6)
    			printf("输入有误,请重新输入!\n");
    		else if (i == 1)
    		{
    			head = NULL;
    			head = creat(head);
    		}
    		else if (i == 2)
    			printLinkList(head);
    		else if (i == 3)
    			find(head);
    		else if (i == 4)
    			sort(head);
    		else if (i == 5)
    			display(head);
    		else if (i == 6)
    			merge(head);
    		else
    			printf("退出系统成功!!!\n");
    	}
    }

     

    展开全文
  • 学生成绩管理系统2009

    2010-04-30 14:07:38
    本系统为学生成绩管理系统软件,能实现学生信息的输入、输出、插入、修改、删除、查找等功能,并能建立和更新的库存信息保存于文件供输出或打印。对于查找功能按精确查找和模糊查找两种方式分别进行,对于删除功能按...
  • 1、 查询学生信息表,查找学生的姓名,性别,并将查询结果按姓名进行排序。 2、查询学生信息表,查找地区在大连的学生,显示其姓名,联系电话,地区。 3、 查询学生信息表,查找性别为女,并且地区不在大连的学生...
  • 基于asp和access的学生成绩管理系统

    热门讨论 2010-12-21 14:38:32
    系统有两个模块,课程表管理和成绩管理。...4、成绩分析功能----即计算学生成绩的总分和排名,并且打印学生成绩(打印全班成绩单,打印个人成绩单) 全班成绩打印时按班级查出来。 打印个人成绩时以班级学号查出来
  • c语言课程设计 学生成绩管理系统 学生成绩管理系统的功能如下: 1.定义及输出。可以显示系统内所有学生的成绩情况; 2.计算并排序。可以计算每个学生三门课程的总分(sum,精度)及平均分(aver,精度,并输出...
  • (4) 能按班级输出学生成绩单 要求:系统以菜单方式工作 工作菜单如下: 输入数据 显示所有数据 按平均分降序排列 查找并显示一组数据" 插入一组数据 修改一组数据" 删除一组数据" 从文件中读入数据" 将...
  • 做一个学生成绩管理系统 学生成绩有语文 数学 英语 功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分 思路: 定义两个结构体,一个为学生单独的链表,存储学生的姓名和成绩,和下一个同学的地址。另一个为...
  • 多种方式查找学生信息;修改学生信息;2种模式删除学生信息;排列方式有总分排名,平均分排名,科目排名等;查看班级信息,本功能将显示班级各科平均分,各个分数档的学生情况,前三名的同学,没有挂科的同学,挂...
  • 学生成绩分析管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式...
  • 这是我自己写的学生成绩管理系统,具有多种功能及优化,用VC6.0能成功运行。 1.登陆注册功能 初始用户名:hello 密码:123456(建议先用这个账号登陆,方便先看看效果) 2.进入退出时的动态及颜色变化效果 3.数据的...
  • 《BCBSOFT学生成绩统计分析系统使用说明》 ================================== 一、系统特点:真正的绿色软件,只有一执行文件即可正常运行,单机版采用本地Paradox数据库,具有安全快速等特点。系统采用...
  • 学生成绩管理系统 功能需求:1、提供身份验证,和使用系统的权限设置、判定。 2、(教师用户)能实现本班同学各学期各科成绩的录入、编辑,数据必须保存在文件中,以便反复使用。 3、(学生用户或游客)提供对...
  • 这是一个学生成绩管理系统,其中“I”表示插入,“L”表示浏览,“Q”表示查询, “E”表示退出,“D”表示删除,“M”表示修改,"c"表示统计各分数段人数,"p"表示打印. 本程序实现了: (1)单独运行以上各功能,...
  • 6.有查询功能,可以按学生、学号等查找学生(查找功能可以扩展) 7.有修改学生资料功能 8.有删改学生资料功能 9.可添加任意多班级,可延续使用 10.有修改班级名功能 11.有删除班级功能 12.可按统考添加...
  • 这是一个学生成绩管理系统,其中“I”表示插入,“L”表示浏览,“Q”表示查询, “E”表示退出,“D”表示删除,“M”表示修改,"c"表示统计各分数段人数,"p"表示打印. 本程序实现了: (1)单独运行以上各功能,即在...
  • 3、(学生用户或游客)提供对学号或姓名,各学期、各学科成绩的查询。 4、(学生和教师用户)能按各学期、各学科分数排序输出(每一科都要能排序输出)。 5、(教师用户)能统计各科成绩分数段的分布(60以下、60~70、...
  • printf("第四步,查找学生信息\n"); char name[100]; printf("请输入学生姓名\n"); scanf("%s",name); search(name); printf("按任意键结束程序\n"); getchar(); } 姓名 学号 语文 数学 英语 ...
  • 1、查询学生信息表,查找学生的姓名,性别,并将查询结果按姓名进行排序。 2、查询学生信息表,查找地区在大连的学生,显示其姓名,联系电话,地区。 3、查询学生信息表,查找性别为女,并且地区不在大连的学生,...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 221
精华内容 88
关键字:

查找学生成绩单