精华内容
下载资源
问答
  • C++实现学生成绩信息登记

    千次阅读 2020-10-05 21:55:43
    C++实现学生成绩信息登记学生成绩信息登记表: 每个学生的数据包括:学号,姓名,和语数英三门的成绩 实现效果: 1.从键盘输入3名学生的数据 2.显示每个学生的三门课的平均分 3.显示每门课的全班平均分 4.按平均...

    C++实现学生成绩信息登记表

    学生成绩信息登记表:
    每个学生的数据包括:学号,姓名,和语数英三门的成绩
    实现效果:
    1.从键盘输入3名学生的数据
    2.显示每个学生的三门课的平均分
    3.显示每门课的全班平均分
    4.按平均分高低排名,并按名次降序输出学生的所有数据

    //学生成绩信息登记表
    //每个学生的数据包括:学号,姓名,和语数英三门的成绩
    //实现效果:
    //1.从键盘输入3名学生的数据
    //2.显示每个学生的三门课的平均分
    //3.显示每门课的全班平均分
    //4.按平均分高低排名,并按名次降序输出学生的所有数据
    #include <iostream>
    using namespace std;
    #define STU 3   //设置学生的人数
     
    //定义学生结构体
    struct Student {
    	int num;//学号
    	string name;//姓名
    	int gradeChinese;//语文成绩
    	int gradeMath;//数学成绩
    	int gradeEnglish;//英语成绩
    };
    //得到输入的学生的信息
    void getStudentInfo(Student a[STU]) {
    	for (int i = 0;i < STU;i++)
    	{
    		cout << "请输入第" << i + 1 << "个同学的" << "学号:" ;
    		cin >> a[i].num;
    		cout << "请输入第" << i + 1 << "个同学的" << "姓名:" ;
    		cin >> a[i].name;
    		cout << "请输入第" << i + 1 << "个同学的" << "语文成绩:" ;
    		cin >> a[i].gradeChinese;
    		cout << "请输入第" << i + 1 << "个同学的" << "数学成绩:" ;
    		cin >> a[i].gradeMath;
    		cout << "请输入第" << i + 1 << "个同学的" << "英语成绩:"  ;
    		cin >> a[i].gradeEnglish;
    	}
    	cout << endl;
    }
    //计算每个学生的三门平均分
    void averageStudent(Student a[STU]) {
    	for (int i = 0;i < STU;i++) 
    	{
    		cout << "第" << i + 1 << "名同学的语数英平均分为:"
    			<< (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3
    			<< endl;
    	}
    	cout << endl;
    }
     
    //计算每门课的全班平均分
    void averageClass(Student a[STU]) {
    	int a_math = 0;//全班数学总分
    	for (int i = 0;i < STU;i++)
    	{
    		a_math = a_math + a[i].gradeMath;
    	}
    	int a_chinese = 0;//全班语文总分
    	for (int i = 0;i < STU;i++)
    	{
    		a_chinese = a_chinese + a[i].gradeChinese;
    	}
    	int a_english = 0;//全班英语总分
    	for (int i = 0;i < STU;i++)
    	{
    		a_english = a_english + a[i].gradeEnglish;
    	}
    	cout << "全班语文的平均分为:"<<a_chinese/STU<<endl;
    	cout << "全班数学的平均分为:"<<a_math/STU<<endl;
    	cout << "全班英语的平均分为:"<<a_english/STU<<endl;
    	cout << endl;
    }
     
    //按平均分降序排名
    void rankStudentGrade(Student a[STU]) {
    	int b[STU];//定义b数组存放每个人的平均分
    	for (int i = 0;i < STU;i++)
    	{
    		b[i] = (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3;
    	}
    	//把b数组数据存一份数据给c数组
    	//b数组中存放的是未排序的平均分,c数组中存放的是排序过后的平均分
    	int c[STU];
    	for (int i = 0;i < STU;i++)
    	{
    		c[i] = b[i];
    	}
    	//冒泡排序
    	for (int i = 0;i < STU - 1;i++)
    	{
    		for (int j = 0;j < STU - 1 - i;j++) 
    		{
    			int temp = 0;
    			if (c[j] < c[j + 1]) 
    			{
    				temp = c[j + 1];
    				c[j + 1] = c[j];
    				c[j] = temp;
    			}
    		}
    	}
    	//测试输出
    	//for (int i = 0;i < STU;i++)
    	//{
    	//	cout << "按平均分降序排名为:" << c[i] << endl;
    	//}
     
    	//比较b和c数组,输出对应平均分同学的成绩
    	for (int i = 0;i < STU;i++)
    	{
    		for (int j = 0;j < STU;j++)
    		{
    			if (c[i] == b[j])
    			{
    				cout << "第" << i + 1 << "名是:" << a[j].name << "  平均分为:" << b[j] 
    					<<"  学号为:"<<a[j].num
    					<< "  语文成绩为:" << a[j].gradeChinese
    					<< "  数学成绩为:" << a[j].gradeMath
    					<< "  英语成绩为:" << a[j].gradeEnglish
    					<< endl;
    			}
    		}
    	}
     
    }
     
    int main()
    {
    	Student a[STU];
     
    	getStudentInfo(a);//得到输入的学生的信息
     
    	//cout << "第三位同学的英语成绩为:" << a[STU - 1].gradeEnglish << endl;//测试是否接收成功
     
    	averageStudent(a);//计算每个学生的三门平均分
     
    	averageClass(a);//计算每门课的全班平均分
     
    	rankStudentGrade(a);//按平均分降序排名
     
    	system("pause");
    	return 0;
     
     
    }
    
    

    在这里插入图片描述
    --------------------------降序输出算法改进-----------------------------

    //学生成绩信息登记表
    //每个学生的数据包括:学号,姓名,和语数英三门的成绩
    //实现效果:
    //1.从键盘输入3名学生的数据
    //2.显示每个学生的三门课的平均分
    //3.显示每门课的全班平均分
    //4.按平均分高低排名,并按名次降序输出学生的所有数据
    #include <iostream>
    using namespace std;
    #define STU 3   //设置学生的人数
     
    //定义学生结构体
    struct Student {
    	int num;//学号
    	string name;//姓名
    	int gradeChinese;//语文成绩
    	int gradeMath;//数学成绩
    	int gradeEnglish;//英语成绩
    };
    //得到输入的学生的信息
    void getStudentInfo(Student a[STU]) {
    	for (int i = 0;i < STU;i++)
    	{
    		cout << "请输入第" << i + 1 << "个同学的" << "学号:" ;
    		cin >> a[i].num;
    		cout << "请输入第" << i + 1 << "个同学的" << "姓名:" ;
    		cin >> a[i].name;
    		cout << "请输入第" << i + 1 << "个同学的" << "语文成绩:" ;
    		cin >> a[i].gradeChinese;
    		cout << "请输入第" << i + 1 << "个同学的" << "数学成绩:" ;
    		cin >> a[i].gradeMath;
    		cout << "请输入第" << i + 1 << "个同学的" << "英语成绩:"  ;
    		cin >> a[i].gradeEnglish;
    	}
    	cout << endl;
    }
    //计算每个学生的三门平均分
    void averageStudent(Student a[STU]) {
    	for (int i = 0;i < STU;i++) 
    	{
    		cout << "第" << i + 1 << "名同学的语数英平均分为:"
    			<< (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3
    			<< endl;
    	}
    	cout << endl;
    }
     
    //计算每门课的全班平均分
    void averageClass(Student a[STU]) {
    	int a_math = 0;//全班数学总分
    	for (int i = 0;i < STU;i++)
    	{
    		a_math = a_math + a[i].gradeMath;
    	}
    	int a_chinese = 0;//全班语文总分
    	for (int i = 0;i < STU;i++)
    	{
    		a_chinese = a_chinese + a[i].gradeChinese;
    	}
    	int a_english = 0;//全班英语总分
    	for (int i = 0;i < STU;i++)
    	{
    		a_english = a_english + a[i].gradeEnglish;
    	}
    	cout << "全班语文的平均分为:"<<a_chinese/STU<<endl;
    	cout << "全班数学的平均分为:"<<a_math/STU<<endl;
    	cout << "全班英语的平均分为:"<<a_english/STU<<endl;
    	cout << endl;
    }
     
    //按平均分降序排名
    void rankStudentGrade(Student a[STU]) {
    	int b[STU];//定义b数组存放每个人的平均分
    	for (int i = 0;i < STU;i++)
    	{
    		b[i] = (a[i].gradeChinese + a[i].gradeEnglish + a[i].gradeMath) / 3;
    	}
    	
    	for (int i = 0;i < STU - 1;i++)
    	{
    		
    		for (int j = 0;j < STU - 1 - i;  j++)
    		{
    			if (b[j] < b[j+1])
    			{
    				Student temp;
    				temp = a[j];
    				a[j] = a[j+1];
    				a[j+1] = temp;
     
     
    				int temp1 = 0;
    				temp1 = b[j];
    				b[j] = b[j + 1];
    				b[j + 1] = temp1;
     
    			}
    		}
    	}
     
     
    	for (int j = 0;j < STU;j++)
    	{
    		cout << "第" << j + 1 << "名是:" << a[j].name 
    			<<"平均分为:"<< (a[j].gradeChinese + a[j].gradeEnglish + a[j].gradeMath) / 3
    			<< "  学号为:" << a[j].num
    			<< "  语文成绩为:" << a[j].gradeChinese
    			<< "  数学成绩为:" << a[j].gradeMath
    			<< "  英语成绩为:" << a[j].gradeEnglish
    			<< endl;
    	}
    }
     
    int main()
    {
    	Student a[STU];
     
    	getStudentInfo(a);//得到输入的学生的信息
     
    	//cout << "第三位同学的英语成绩为:" << a[STU - 1].gradeEnglish << endl;//测试是否接收成功
     
    	averageStudent(a);//计算每个学生的三门平均分
     
    	averageClass(a);//计算每门课的全班平均分
     
    	rankStudentGrade(a);//按平均分降序排名
     
    	system("pause");
    	return 0;
     
     
    }
    
    

    转载自:黑凤梨の博客

    展开全文
  • C语言学生成绩统计

    2015-05-21 16:45:13
    录入学生的信息,并且保存到一个磁盘文件。可以录入学生的平时成绩...按照总成绩学生进行排序,查询某个学生成绩(按照学号、姓名、成绩等关键词进行查询)。制定学生信息至少包括:学号、姓名、班级、成绩等内容。
  • sql练习学生成绩查询实践

    千次阅读 2019-06-28 18:53:51
    --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 ...

    数据使用介绍:

    --1.学生表
    Student(SId,Sname,Sage,Ssex)
    --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
    
    --2.课程表
    Course(CId,Cname,TId)
    --CId 课程编号,Cname 课程名称,TId 教师编号
    
    --3.教师表
    Teacher(TId,Tname)
    --TId 教师编号,Tname 教师姓名
    
    --4.成绩表
    SC(SId,CId,score)
    --SId 学生编号,CId 课程编号,score 分数
    
    create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
    insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
    insert into Student values('02' , '钱电' , '1990-12-21' , '男');
    insert into Student values('03' , '孙风' , '1990-12-20' , '男');
    insert into Student values('04' , '李云' , '1990-12-06' , '男');
    insert into Student values('05' , '周梅' , '1991-12-01' , '女');
    insert into Student values('06' , '吴兰' , '1992-01-01' , '女');
    insert into Student values('07' , '郑竹' , '1989-01-01' , '女');
    insert into Student values('09' , '张三' , '2017-12-20' , '女');
    insert into Student values('10' , '李四' , '2017-12-25' , '女');
    insert into Student values('11' , '李四' , '2012-06-06' , '女');
    insert into Student values('12' , '赵六' , '2013-06-13' , '女');
    insert into Student values('13' , '孙七' , '2014-06-01' , '女');
    
    create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
    insert into Course values('01' , '语文' , '02');
    insert into Course values('02' , '数学' , '01');
    insert into Course values('03' , '英语' , '03');
    
    create table Teacher(TId varchar(10),Tname varchar(10));
    insert into Teacher values('01' , '张三');
    insert into Teacher values('02' , '李四');
    insert into Teacher values('03' , '王五');
    
    create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
    insert into SC values('01' , '01' , 80);
    insert into SC values('01' , '02' , 90);
    insert into SC values('01' , '03' , 99);
    insert into SC values('02' , '01' , 70);
    insert into SC values('02' , '02' , 60);
    insert into SC values('02' , '03' , 80);
    insert into SC values('03' , '01' , 80);
    insert into SC values('03' , '02' , 80);
    insert into SC values('03' , '03' , 80);
    insert into SC values('04' , '01' , 50);
    insert into SC values('04' , '02' , 30);
    insert into SC values('04' , '03' , 20);
    insert into SC values('05' , '01' , 76);
    insert into SC values('05' , '02' , 87);
    insert into SC values('06' , '01' , 31);
    insert into SC values('06' , '03' , 34);
    insert into SC values('07' , '02' , 89);
    insert into SC values('07' , '03' , 98);
    
    1. 查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数
      (使用join时要有on与之对应,表示连接的条件)
    select * from Student JOIN (
    	select t1.sid,class1, class2 from 
    	(select sid,score as class1 from sc where sc.CId='01')as t1,
    	(select sid,score as class2 from sc where sc.CId='02')as t2 
    	where t1.SId = t2.SId AND t1.class1 > t2.class2)
    as r on Student.SId = r.sid;
    

    1.1 查询同时存在" 01 “课程和” 02 "课程的情况

    select t1.sid,t1.score as class1,t2.score as class2 from 
    	(select sid,cid,score from sc where sc.CId='01') as t1,
    	(select sid,cid,score from sc where sc.CId='02')as t2 
     where t1.sid = t2.sid;
    

    1.2 查询存在" 01 “课程但可能不存在” 02 "课程的情况(不存在时显示为 null )
    (使用左外连接时,保留左侧多余数据)

    select t1.sid,class1,class2 from 
    	(select sid,cid,score as class1 from sc where sc.CId='01') as t1 
     left join
    	(select sid,cid,score as class2 from sc where sc.CId='02')as t2 
     on t1.sid = t2.sid;
    

    1.3 查询不存在" 01 “课程但存在” 02 "课程的情况
    (使用in和not in 进行选择)

    select * from sc where sc.sid 
        not in (select sid from sc where cid='01') and sc.cid='02';
    
    1. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
      (两种方法)
    select student.sid,student.Sname,ss from (
        select sid,sum(score)/count(score) as ss from sc 
        group by sc.sid)as r,student where 
        ss>60 and student.sid=r.sid;
    select student.sid,student.Sname,ss from (
        select sid,avg(score) as ss from sc 
        group by sc.sid having avg(score)>60)as r,student 
        where student.sid=r.sid;
    
    1. 查询在 SC 表存在成绩的学生信息
    (distinct对重复行进行去重)
    select * from student where sid in(select distinct sid from sc);
    
    1. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
    (第二条会显示出没有选课的学生的成绩和选课数为null)
    select student.sid,Sname,ss,cc from student,(select sid,count(cid) as cc,sum(score) as ss from sc group by sc.sid) as r where student.sid=r.sid;
    select student.sid,Sname,ss,cc from student left join (select sid,count(cid) as cc,sum(score) as ss from sc group by sc.sid) as r on student.sid=r.sid;
    

    4.1 查有成绩的学生信息

    (关于inexists的不同用法)
    select * from student where sid in(select distinct sid from sc);
    select * from student where exists(select sc.sid from sc where student.sid=sc.sid);
    
    1. 查询「李」姓老师的数量
    (部分匹配查询:%->0个或多个字符,_(下划线)->代表一个字符,[]->表示在某一范围的字符,[^]->表示不再某一范围的字符)
    select count(*) from Teacher where Teacher.Tname like '李%';
    
    1. 查询学过「张三」老师授课的同学的信息
    (进行多表的连接)
    select * from student join(select sc.sid from Teacher,sc,Course where Tname='张三' and sc.cid=Course.cid and Course.TId=Teacher.TId)as r on student.sid=r.sid;
    
    1. 查询没有学全所有课程的同学的信息
    (后面使用exists)++++++++++++++++
    select * from student where student.sid in (select sc.sid from sc group by sc.sid having count(sc.sid)<(select count(*) from Course));
    
    1. 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息
    select * from student where student.sid in (select sc.sid from sc where sc.cid in (select sc.cid from sc where sc.sid='01'));
    
    1. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息
    (只有深刻理解exists的作用才能明白其含义:1.先从student中拿出一条记录,2.从a中拿出第一条记录,
    	3.根据student和a中的信息去遍历sc中每一条记录,如果存在就返回True,
             否则返回Falsenot exists正好相反。
    	4.如果返回True,将student记录放入结果集中。
         学习连接: https://zhuanlan.zhihu.com/p/20005249 )
    select * from student where not exists(
    	select * from (select cid from sc where sid = '01')as a where not exists(
    		select * from sc where sc.sid=student.sid and a.cid=sc.cid
    		)) and student.sid!='01';
    
    1. 查询没学过"张三"老师讲授的任一门课程的学生姓名
    (对于exists的理解要再思考一下)
    select Sname from student where not exists(
    	select * from (select cid from Teacher,Course where Tname='张三'and Teacher.TId=Course.TId)as a 
    	where  exists(select * from sc where student.sid=sc.sid and a.cid=sc.cid));
    
    select * from student
        where student.sid not in(
            select sc.sid from sc where sc.cid in(
                select course.cid from course where course.tid in(
                    select teacher.tid from teacher where tname = "张三"
                )
            )
        );
    
    1. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
    select student.sid,student.Sname,r.ss from student 
    join (
    	select sid,avg(score)as ss from sc where score<60 group by sid having count(*)>=2
    	)as r on student.sid=r.sid;
    
    1. 检索" 01 "课程分数小于 60,按分数降序排列的学生信息
    select * from student join sc on student.sid=sc.sid where sc.cid='01' and score<60 order by score desc;
    
    1. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
    select sc.*,avg(score) as ss from sc group by sid order by ss desc;
    
    1. 查询各科成绩最高分、最低分和平均分:
    以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
    及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
    要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
    select sc.cid,max(sc.score)as 最高分,min(sc.score)as 最低分,avg(sc.score)as 平均分 from sc group by cid;
    
    1. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺
    select a.sid,a.cid,a.score ,count(b.score)+1 as rank from sc as a 
        left join sc as b on a.cid=b.cid and a.score<b.score 
        group by a.cid,a.sid,a.score order by a.cid,rank asc;
    

    15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次

    select a.sid,a.cid,a.score ,count(distinct b.score)+1 as rank from sc as a 
        left join sc as b on a.cid=b.cid and a.score<b.score 
        group by a.cid,a.sid,a.score order by a.cid,rank asc;
    
    1. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺
    select (select count( distinct ss) from (select sc.sid,sum(score) as ss from sc group by sc.sid) as a where a.ss>=sums.ss)as rank,sums.sid,sums.ss 
    from (select sc.sid,sum(score) as ss from sc group by sc.sid) as sums order by sums.ss desc;
    

    16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺

    select (@i:=@i+1) as rank,b.sid,b.ss from (
    	select sid,sum(score)as ss from sc group by sid order by ss desc)as b,(select @i:=0)a;
    
    1. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比
    select sc.cid,Course.Cname,
    count(case when sc.score>85 then 1 end)as "[100-85]",
    count(case when sc.score<=85 and sc.score>70 then 1 end)as "[85-70]",
    count(case when sc.score<=70 and sc.score>60 then 1 end)as "[70-60]",
    count(case when sc.score<=60 then 1 end)as "[100-85]"
     from sc left join course on sc.cid=course.cid group by sc.cid;
    
    1. 查询各科成绩前三名的记录
    select * from sc as a left join sc as b on a.cid=b.cid and a.score<b.score group by a.cid,a.sid,a.score having count(b.cid)<3;
    
    1. 查询每门课程被选修的学生数
    select sc.cid,Course.Cname,count(sid) from sc,course where sc.cid=course.cid group by sc.cid;
    
    1. 查询出只选修两门课程的学生学号和姓名
    select student.sid,student.Sname from student,(select * from sc group by sid having count(cid)=2)as r where student.sid=r.sid;
    
    1. 查询男生、女生人数
    select Ssex,count(*) from student group by Ssex;
    
    1. 查询名字中含有「风」字的学生信息
    select * from student where Sname like '%风%';
    
    1. 查询同名同性学生名单,并统计同名人数
    select Sname,count(*) from student group by Sname having count(*)>1;
    
    1. 查询 1990 年出生的学生名单
    select * from student where Sage like '1990%';
    select * from student where year(student.Sage)=1990;
    
    1. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
    select sc.cid,course.Cname,avg(score)as ss from sc,course where sc.cid=course.cid group by cid order by ss desc,sc.cid asc;
    
    1. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩
    select student.sid,student.Sname,r.average from student,(
        select sid,avg(score)as average from sc group by sid having average>=85)r 
        where r.sid = student.sid; 
    select student.sid, student.sname, AVG(sc.score) as aver from student,sc 
        where student.sid = sc.sid group by sc.sid having aver > 85;
    
    1. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数
    select student.sname,sc.score from student,sc,course 
        where course.Cname='数学'and course.cid = sc.cid and student.sid=sc.sid and sc.score<60;
    
    
    1. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
    select student.sname,sc.cid,sc.score from student left join sc on student.sid=sc.sid;
    
    1. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数
    select student.sname,course.Cname,sc.score from student,course,sc where student.sid=sc.sid and sc.cid=course.cid and sc.score>70;
    
    1. 查询不及格的课程
    select sc.cid,course.Cname,'存在' as 不及格 from sc,course where score<60 and sc.cid=course.cid group by cid;
    
    1. 查询课程编号为 01 且课程成绩在 80 分以上的学生的学号和姓名
    select student.sid,student.sname from student,sc 
        where student.sid=sc.sid and sc.cid='01' and sc.score>=80;
    select student.sid,student.sname from student 
        where student.sid in (select sid from sc where sc.cid='01' and score>=80);
    
    1. 求每门课程的学生人数
    select course.Cname,count(*)as '人数' from sc,course where course.cid=sc.cid group by sc.cid;
    
    1. 成绩不重复,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
    select student.*,sc.score from student,sc,teacher,course 
        where Teacher.tname='张三' and Teacher.tid=course.tid and course.cid=sc.cid and sc.sid=student.sid 
        order by score desc limit 1;
    
    1. 成绩有重复的情况下,查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩
    (进行查询前先添加一条记录)
    insert into SC values('13' , '02' , 90);
    select student.*,sc.score from student,sc,course,teacher where sc.score=(
    	select max(score) from sc,teacher,course where teacher.tname='张三' and Teacher.tid=course.tid and course.cid=sc.cid)
    and teacher.tname='张三' and Teacher.tid=course.tid and course.cid=sc.cid and student.sid=sc.sid;
    
    1. 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩
    (通过group by来对重复记录(01 03,03 01)进行去重)
    select sc.sid,sc.cid,sc.score from sc join sc as r on sc.sid=r.sid and sc.cid!=r.cid and sc.score=r.score group by sc.sid,sc.cid;
    
    1. 查询每门功成绩最好的前两名
    (这里count是为了筛选:比如最高的分数不比任何一个分数低,第二高仅仅比最高成绩低,而最低分可能比三四个记录中的分数要低)
    select a.sid,a.cid,a.score from sc as a left join sc as b 
        on a.cid=b.cid and a.score<b.score 
        group by a.cid,a.sid,a.score having count(b.cid)<2 order by a.cid;
    
    1. 统计每门课程的学生选修人数(超过 5 人的课程才统计)。
    select sc.cid,count(sc.sid) as '选修人数' from sc group by sc.cid having count(sc.sid)>5;
    
    1. 检索至少选修两门课程的学生学号
    select sc.sid,count(sc.cid) as '人数' from sc group by sid having count(sc.cid)>=2;
    
    1. 查询选修了全部课程的学生信息
    select student.* from student where not exists(
        select * from course where  not exists(
        select * from sc where course.cid=sc.cid and sc.sid=student.sid));
    
    1. 查询各学生的年龄,只按年份来算
    select student.sname,year(curdate())-year(student.Sage) as '年龄' from student;
    
    1. 按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
    select student.sid,student.sname,year(from_days(datediff(curdate(),student.Sage))) as '年龄' from student;
    select student.sid,student.sname,timestampdiff(year,student.Sage,curdate()) as '年龄' from student;
    
    1. 查询本周过生日的学生
    select student.sid,student.sname,weekofyear(curdate()) from student where weekofyear(curdate())=weekofyear(student.Sage);
    
    1. 查询下周过生日的学生
    select student.sid,student.sname,weekofyear(curdate()) from student where weekofyear(curdate())+1=weekofyear(student.Sage);
    
    
    1. 查询本月过生日的学生
    select student.sid,student.sname,month(curdate()) from student where month(curdate())=month(student.Sage);
    
    1. 查询下月过生日的学生
    select student.sid,student.sname,month(curdate())+1 from student where month(curdate())+1=month(student.Sage);
    

    视图创建:

    create view  Student_age 
    as  select student.sname,year(curdate())-year(student.Sage) as '年龄' 
        from student;
    

    授权:
    系统授权:

    grant create table to zhangSan;
    

    回收权限:

    revoke create table from zhangSan;
    

    对象授权:(C表上的选择操作赋予所用用户,并且可以将此权利赋予他人)

    grant  select on C to public
    with grant option;
    

    回收授权:

    revoke select on c from user3;
    
    展开全文
  • 最佳答案changgunye新兵答主11-06TA获得超过6147个赞程序设计基础实训项目名称:学生学分管理系 别: 计算机工程系专 业: 计算机网络技术班 级: 0922211学生姓名:指导教师: 韦立蓉北 京 信 息 职 业 技 术 学 院...

    最佳答案

    652893.jpg

    changgunye

    新兵答主

    11-06

    TA获得超过6147个赞

    程序设计基础实训

    项目名称:

    学生学分管理

    系 别: 计算机工程系

    专 业: 计算机网络技术

    班 级: 0922211

    学生姓名:

    指导教师: 韦立蓉

    北 京 信 息 职 业 技 术 学 院

    2019年 1 月 日

    一、项目背景介绍

    (概要介绍此项目设计的意义和要求)

    本程序为学生学分管理系统。本程序根据现实中的问题通过c语言形式编程。本程序要求能够登记学分,显示学分查询学分,修改学分,删除学分,统计学分。

    二、程序功能描述:

    (描述基本程序中每个函数的功能,给处各函数流程图)

    1、

    登记单流程图

    2、

    显示学分流程图

    3、

    查询学分流程图

    4、

    修改信息流程图

    5、

    删除信息流程图

    6、

    统计信息流程图

    三、设计方案介绍

    (基本思想函数调用的思路介绍)

    1、主流程图

    2、界面设计

    (界面设计,函数的定义,功能设计、,罗列出所有需要解决的问题

    函数调用问题,循环问题,查找问题,修改问题,查询问题,删除问题,比较问题。

    3、变量定义

    序号 变量名 变量性质(局部/全局) 功能 作用范围

    1 typedef 全局 定义结构体类型 整体

    2 Int 全局 定义五门课类型 整体

    ... Char 全局 定义学号班级姓名类型 整体

    5、函数调用的类型

    四、测试与分析

    (简要介绍测试的作用及意义)

    测试可以知道所编写的程序是否可行,通过实际的测试可以找出程序是否符合现实。通过测试和反复修改可以使程序更加人性化。

    (一)测试列表

    (以表格的形式给出,不少于10个)

    测试数据或执行操作 执行结果 是否正确 测试人签名

    调用主菜单 显示了主菜单 正确

    选择主菜单里的1 请输入学生学生信息…. 正确

    输出 有重复有乱码 否

    查询 无 否

    修改 按学号修改……. 是

    按学号查询 显示了该信息 是

    按班级查询 只显示里一名同学的信息 否

    按学好删除 删除成功 是

    须补考基础课的 所有学生信息都显示 否

    可升学学生 显示了该显示的信息 是

    (二)测试结果分析

    (根据以下表格,如实填写并签名)

    bug个数 错误类型 错误原因分析 是否修改 设计者签名

    1 与count声名中的类型不匹配 少了void count() 是

    2 错误 jia.c 19: 表达式语法错在 main 函数中 Scanf中少了&s 是

    4 错误 jia.c 31: do语句中必须有while关键字在 main 函数中 没写while 是

    5 错误 jia.c 30: 未定义的符号''s''在 main 函数中 上面没int I; 是

    6 错误 1.c 335: 表达式语法错在 count 函数中 Switch() 括号里没有变量 是

    7

    五、实训总结

    (总结实训过程中的所使用的知识和已实现的功能,总结自己掌握理论知识和动手能力的程度,提出自己的不足之处及改进措施)

    通过这一周的实训。我们充分运用了所学的东西编出了解决实际问题的程序。我们运用了函数的调用,循环,定义,比较,查找,删除等知识。通过实际动手,我更加深入的了解了课本上的知识。同时提高了我的动手能力。

    实训中我找到了我许多的不足,以前我遇到不董的就会直接去问别人,不独自思考。试训中我学会了独自思考和团队合作。虽然我在编程当中遇到许多问题,但经过独自思考和学习解决了问题。最后编出了管理程序。

    C语言学生学分管理程序代码

    typedef struct student

    { char num[11],name[7],class[10];

    int jichu,renwen,xuanxiu,zhuanye,shiyan;

    }STU;

    STU st[37];

    static int n;

    void menu();

    void input();

    void print();

    void query();

    void modi();

    void del();

    void count();

    main()

    { int s;

    do{

    menu();

    printf(" 请选择:");

    scanf("%d",&s);

    switch(s)

    { case 0:break;

    case 1:input();break;

    case 2:print();break;

    case 3:query();break;

    case 4:modi();break;

    case 5:del();break;

    case 6:count();break;

    default:printf("选择无效!");

    }

    }while(s!=0);

    getch();

    }

    void menu()

    { clrscr();

    printf(" ****************************");

    printf(" ********欢迎您的使用********");

    printf(" ******学生学分管理程序******");

    printf(" *** 1-登记学生学分 ***");

    printf(" *** 2-显示学生学分 ***");

    printf(" *** 3-查询学生学分 ***");

    printf(" *** 4-修改学生学分 ***");

    printf(" *** 5-删除学生学分 ***");

    printf(" *** 6-统计学生学分 ***");

    printf(" *** 0-退出 ***");

    printf(" ****************************");

    }

    void input()

    { do

    { printf("请输入学生信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    scanf("%s%s%s%d%d%d%d%d",st[n].num,st[n].name,st[n].class,&st[n].jichu,&st[n].zhuanye,&st[n].xuanxiu,&st[n].renwen,&st[n].shiyan);

    n++;

    printf("是否继续输入?(n-退出,任意键继续):");

    }while(getche()!=''n'');

    }

    void print()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iprintf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }

    void menu1()

    { clrscr();

    printf(" *****************************");

    printf(" ***********查询模块**********");

    printf(" *** 1-按学号查询 ***");

    printf(" *** 2-按姓名查询 ***");

    printf(" *** 3-按班级查询 ***");

    printf(" *** 0-退出 ***");

    printf(" *****************************");

    }

    void query1()

    { char sn[11];

    int i;

    printf("请输入要查询的学号:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].num)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    printf("\按任意键继续");

    break;

    }

    else printf("对不起!没有该学号,任意键继续");

    getch();

    }

    void query2()

    { char sn[7];

    int i;

    printf("请输入要查询的姓名:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].name)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    printf("\按任意键继续");

    break;

    }else printf("对不起!没有该姓名,任意键继续");

    getch();

    }

    void query3()

    { char sn[10];

    int i;

    printf("请输入要查询的班级:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].class)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    printf("\按任意键继续");

    break;

    }

    else printf("对不起!没有该班,任意键继续");

    getch();

    }

    void query()

    { int s;

    do{

    menu1();

    printf(" 请选择:");

    scanf("%d",&s);

    switch(s)

    { case 0:break;

    case 1:query1();break;

    case 2:query2();break;

    case 3:query3();break;

    default:printf("选择无效!");

    }

    }while(s!=0);

    getch();

    }

    void menu2()

    { clrscr();

    printf(" *****************************");

    printf(" ***********修改模块**********");

    printf(" *** 1-按学号修改 ***");

    printf(" *** 2-按姓名修改 ***");

    printf(" *** 3-按班级修改 ***");

    printf(" *** 0-退出 ***");

    printf(" *****************************");

    }

    void modi1()

    { char sn[11];

    int i;

    printf("请输入要修改学分学生的学号:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].num)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    {printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);

    printf("是否继续输入?(n-退出,任意键继续):");

    }while(getche()!=''n'');

    break;

    }

    getch();

    }

    void modi2()

    { char sn[7];

    int i;

    printf("请输入要修改学分学生的姓名:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].name)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    {printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);

    printf("是否继续输入?(n-退出,任意键继续):");

    }while(getche()!=''n'');

    break;

    }

    getch();

    }

    void modi3()

    { char sn[10];

    int i;

    printf("请输入要修改学分学生的班级:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].class)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    {printf("请输入学生学分信息:学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);

    printf("是否继续输入?(n-退出,任意键继续):");

    } while(getche()!=''n'');

    break;

    }

    getch();

    }

    void modi()

    { int s;

    do{

    menu2();

    printf(" 请选择:");

    scanf("%d",&s);

    switch(s)

    { case 0:break;

    case 1:modi1();break;

    case 2:modi2();break;

    case 3:modi3();break;

    default:printf("选择无效!");

    }

    }while(s!=0);

    getch();

    }

    void menu3()

    { clrscr();

    printf(" *****************************");

    printf(" ***********删除模块**********");

    printf(" *** 1-按学号删除 ***");

    printf(" *** 2-按姓名删除 ***");

    printf(" *** 3-按班级删除 ***");

    printf(" *** 0-退出 ***");

    printf(" *****************************");

    }

    void del1()

    { char sn[11];

    int i,j;

    printf("请输入要删除学分学生的学号:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].num)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    printf("是否删除(任意键确认,n\取消)");

    if(getche()!=''n'');

    {if(i!=n-1);

    for(j=i;jst[j]=st[j+1];

    n--;

    printf("该记录已删除");

    getch();

    break ;

    }

    }

    else printf("对不起!没有该学号,任意键继续");

    }

    void del2()

    { char sn[7];

    int i,j;

    printf("请输入要删除学分学生的姓名:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].name)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    printf("是否删除(任意键确认,n\取消)");

    if(getche()!=''n'');

    {if(i!=n-1);

    for(j=i;jst[j]=st[j+1];

    n--;

    printf("该记录已删除");

    getch();

    break ;

    }

    }

    else printf("对不起!没有该学号,任意键继续");

    }

    void del3()

    { char sn[10];

    int i,j;

    printf("请输入要删除学分学生的班级:");

    scanf("%s",sn);

    for(i=0;iif(strcmp(sn,st[i].class)==0)

    {printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    printf("是否删除(任意键确认,n\取消)");

    if(getche()!=''n'');

    {if(i!=n-1);

    for(j=i;jst[j]=st[j+1];

    n--;

    printf("该记录已删除");

    getch();

    break ;

    }

    }

    else printf("对不起!没有该学号,任意键继续");

    }

    void del()

    { int s;

    do{

    menu3();

    printf(" 请选择:");

    scanf("%d",&s);

    switch(s)

    { case 0:break;

    case 1:del1();break;

    case 2:del2();break;

    case 3:del3();break;

    default:printf("选择无效!");

    }

    }while(s!=0);

    getch();

    }

    void menu4()

    { clrscr();

    printf(" *****************************");

    printf(" ***********统计模块**********");

    printf(" *** 1- 可升学的学生 ***");

    printf(" *** 2-需补考基础课的 ***");

    printf(" *** 3-需补考专业课的 ***");

    printf(" *** 4-需补考选修课的 ***");

    printf(" *** 5-需补考人文课的 ***");

    printf(" *** 6-需补考实验课的 ***");

    printf(" *** 0-退出 ***");

    printf(" *****************************");

    }

    void count1()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iif(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }

    void count2()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iif(st[i].jichu<60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }void count3()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iif(st[i].jichu>=60&st[i].zhuanye<60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }

    void count4()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iif(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu<60&st[i].renwen>=60&st[i].shiyan>=60)

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }

    void count5()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iif(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen<60&st[i].shiyan>=60)

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }

    void count6()

    { int i;

    printf("序号 学号 姓名 班级 基础课 专业课 选修课 人文课 实验课");

    for(i=0;iif(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan<60)

    printf("%2d %7s %7s %5s %4d %4d %4d %4d %4d",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);

    getch();

    }

    void count()

    { int s;

    do{

    menu4();

    printf(" 请选择:");

    scanf("%d",&s);

    switch(s)

    { case 0:break;

    case 1:count1();break;

    case 2:count2();break;

    case 3:count3();break;

    case 4:count4();break;

    case 5:count5();break;

    case 6:count6();break;

    default:printf("选择无效!");

    }

    }while(s!=0);

    getch();

    }

    声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:service@bkw.cn 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

    |

    展开全文
  • 学生成绩管理

    2021-07-11 01:46:16
    建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩Python,C++,Java)。 程序运行时显示一个简单的菜单,例如: (1):信息输入(INPUT) (2):总分统计(COUNT) (3):...

    1.问题描述

            建立一个4个学生的信息登记表,每个学生的信息包括:学号,姓名,和3门课程的成绩Python,C++,Java)。

            程序运行时显示一个简单的菜单,例如:

            (1):信息输入(INPUT)

            (2):总分统计(COUNT)

            (3):总分排序(SORT)

            (4):查询(QUERY)

            其中:(1)对4个学生的信息进行输入

                       (2)对每个学生的3门课程统计总分

                       (3)对4个学生的总分按降序排序并显示出来

                       (4)查询输入一个学号后,显示出该学生的有关信息

            数据结构:

    struct student
    {
        int num;            //学号
        char name[20];      //姓名
        int javascore;      //java成绩
        int cscore;         //C++语言
        int pythonscore;    //python成绩
        struct student *next;
    };

    2.概要设计

        本程序包含7个函数,其函数定义和作用分别为:

      (1)void menu():显示菜单。

      (2)void input(stuNode* list):获取用户输入的学生信息,创建新结点并插入到链表中。

      (3)void count(stuNode* list):遍历链表的每个数据结点,计算三门成绩之和并赋值给结点的数据域中的count变量。

      (4)void sort(stuNode* list):使用选择排序法对链表按总分高低进行降序排序。在未排序的结点中找到总分最高的结点,将其放到第一个数据结点的位置,接着从剩余未排序的结点中继续寻找总分最高的结点,放到第二个数据结点的位置,如此循环,直至所有结点排序完毕。

      (5)void query(stuNode* list):用户输入学号,查询该学号对应的学生信息并打印输出;如果链表中没有该学号,则提示该学生不存在。

      (6)void delete(stuNode* list):删除指定学号的学生信息。

      (7)void show(stuNode* list):显示全部的学生信息。

    3.程序实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct student
    {
        int num;//学号
        char name[20];//姓名
        int javascore;//java成绩
        int cscore;//c++语言
        int pythonscore;//python成绩
        int count;//总分
        struct student* next;//指向下一个学生
    };
    
    typedef struct student stuNode;
    
    // 信息输入
    void input(stuNode* list)
    {
    	// 为结点申请内存空间 
        stuNode* stu = (stuNode*)malloc(sizeof(stuNode));
        // 申请失败
        if (stu==NULL)
    	{
    		printf("\n内存不足,添加失败!\n\n");
    		return ;	
    	} 
        printf("学号:");
        scanf("%d",&stu->num);
        printf("姓名:");
        scanf("%s",stu->name);
        printf("Java成绩:");
        scanf("%d",&stu->javascore);
        printf("C++成绩:");
        scanf("%d",&stu->cscore);
        printf("Python成绩:");
        scanf("%d",&stu->pythonscore);
         
        // 把新结点插入到头结点后 
        stu->next=list->next;
        list->next=stu;
        printf("\n添加成功!\n\n");
    }
    
    // 总分统计
    void count(stuNode* list)
    {
        stuNode* p = list->next;
        if(list==NULL||list->next==NULL)
        {
            printf("\n没有学生信息,无法统计!\n\n");
            return ;
        }
        // 遍历整个链表,计算每个学生的总分 
        while(p!=NULL)
        { 
            int count = p->pythonscore+p->javascore+p->cscore;
            p->count = count;
            p=p->next;
        }
    }
    
    // 总分排序
    void sort(stuNode* list)
    {
        stuNode *p,*q,temp;
        // 如果链表为空或者只有头结点,排不了序 
        if(list==NULL||list->next==NULL)
        {
            printf("\n没有学生信息,无法进行排序!\n\n");
            return ;
        }
        for(p=list->next;p->next!=NULL;p=p->next)
        {
            for (q=p->next;q!=NULL;q=q->next)
            {
                if (q->count>p->count)
                {
                	// 交换两个结点的值 
                    temp = *p;
                    *p=*q;
                    *q=temp;
                    temp.next=p->next;
                    p->next=q->next;
                    q->next=temp.next;
                }
            }
        }
    }
    
    // 查询
    void query(stuNode* list)
    {
        stuNode *p=list;
        int num;
        if(list==NULL||list->next==NULL)
        {
            printf("\n没有学生信息,无法查询!\n\n");
            return ;
        }
        printf("学号:");
        scanf("%d",&num);
        p=p->next;
        while(p!=NULL)
        {
            if (p->num == num)
            {
            	printf("\n学号\t姓名\t\tJava\tC++\tPython\t\t总分\n");
                printf("%d\t%-10s\t%d\t%d\t%d\t\t%d\n\n",p->num,p->name,p->javascore,p->cscore,p->pythonscore,p->count);
                return ;
            }
            p=p->next;
        }
        printf("\n没有该学生的信息!\n\n");
    }
    
    // 删除
    void delete(stuNode* list)
    {
        stuNode *p,*q;
        int num;
        if(list==NULL||list->next==NULL)
        {
            printf("\n没有学生信息,无法删除!\n\n");
            return ;
        }
        printf("学号:");
        scanf("%d",&num);
        p=list;
        while(p->next!=NULL)
        {
        	// 如果找到了,先让前一个结点的next指向后继结点,再释放当前结点 
            if (p->next->num == num)
            {
                q=p->next;
                p->next = p->next->next;
                free(q);
                printf("\n删除成功!\n\n");
                return ;
            }
            p=p->next;
        }
        printf("\n没有该学生的信息,无法删除!\n\n");
    }
    
    // 显示全部
    void show(stuNode* list)
    {
        stuNode* p = list;
        if (list==NULL || list->next==NULL)
        {
            printf("\n没有学生信息!\n\n");
            return ;
        }
        p=list->next;
        printf("学号\t姓名\t\tJava\tC++\tPython\t\t总分\n");
        while(p!=NULL)
        {
            printf("%d\t%-10s\t%d\t%d\t%d\t\t%d\n",p->num,p->name,p->javascore,p->cscore,p->pythonscore,p->count);
            p=p->next;
        }
        printf("\n\n");
    }
    
    
    // 菜单
    void menu()
    {
        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\n");
    }
    
    int main()
    {
        int code;// 选项代码
        char over = 'Y';//是否继续添加学生的标志 
        // 初始化链表 
        stuNode* list = (stuNode*)malloc(sizeof(stuNode));
        if (list == NULL)
        {
            printf("\n内存不足,程序错误!\n");
            return -1;
        }
        list->count=0;
        list->next=NULL;
    
        menu();
    
        do{
            printf("请输入选项代码(0-6):");
            scanf("%d",&code);
            printf("\n"); 
            switch(code)
            {
            	case 0:
                    return 0;
                case 1:
                    do{
                        input(list);
                        printf("继续添加?(Y or N):");
                        getchar();
                        over=getchar();
                        printf("\n"); 
                    }while(over!='N');
                    break;
                case 2:
                    count(list);
                    show(list);
                    break;
                case 3:
                    sort(list);
                    show(list);
                    break;
                case 4:
                    query(list);
                    break;
                case 5:
                    delete(list);
                    break;
                case 6:
                    show(list);
                    break;
                default:
                    printf("\n输入错误,请重新输入!\n\n");
                    break;
            }
        }while(code!=0);
        return 0;
    }

    4.实现界面

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

    千次阅读 多人点赞 2019-06-13 09:05:00
    Web学生成绩管理系统 基于JavaWeb开发的学生成绩,使用MyEclipse2014开发,连接MySQL数据库,存储学生的身份信息、成绩,管理员的身份信息,课程信息。 功能说明: 学生注册。学生身份:跳转到学生登录界面,点击...
  • 本次毕业设计根据学生在校的基本情况,分析现状各个学校的基本需求情况,进行设计的一款学生成绩管理系统,通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等,基本情况的管理。本次设计包括...
  • 学生登记学生屏幕 教师注册 教师屏幕 规格/开源库: Ikonli提供了可在Java应用程序中使用的图标包。 当前支持Swing和JavaFX UI工具包。 JavaFX材料设计库。 SQLite JDBC驱动程序。 修饰的JavaFX场景,...
  • 用C语言编写学生成绩管理系统,要求该系统可 对学生操作:添加和删除操作。 可对3门成绩中各门成绩进行 成绩操作:录入、修改、排序、筛选、求平均分、数据保存为文件。 学生具备学号、姓名、性别和住址属性。 代码 #...
  • 项目要求,GUI界面,实现以下功能,能够录入学生的信息及成绩,具体为姓名、学号、应用数学、大学英语、java编程、计算机应用。还能够根据输入学生姓名返回学生的信息。 一、设置主界面 需要注意的是,在该程序...
  • 第二章 成绩录入第三条任课教师在平时考核成绩和期末考试成绩评定后,将成绩记入《成绩登记表》,成绩一经记载不得随意更改,《成绩登记表》经登分人、教研室主任签字确认后交开课单位存档。第四...
  • 老师自制二维码神器“扫”学生成绩 “滴”,手机扫一下作业本上的二维码,学生成绩以及交作业的信息便一清二楚。这是浙江建德严州中学梅城校区语文老师杨大为自制的“二维码”软件,可以直接扫出漏网之鱼,还可以...
  • 关于中考报名、中考成绩查询以及志愿填报等都是在这个网络平台上进行,所以同学们一定不要马虎。中考即将进入了倒计时的时间,同学们尽量先不要放松自己,要打起精神来争取在最后阶段好好的冲刺一下。下面为大家带来...
  • 中考成绩公布后家长要调整好自己的心态,...下面小编为大家带来承德中考查询成绩的网址相关信息。2020年河北承德中考查询成绩上那个网站承德中考招生录取原则普通高中学校招生坚持全面衡量、综合评价、尊重志愿、择...
  • 每年中考结束后很多考生和家长都很关心成绩...台州中考成绩查询方式和查询入口在哪里?等等一些列问题都是要考生和家长了解的?本文升学网小编为大家整理了台州中考成绩及分数线查询的相关知识,希望对你有帮助。...
  • 登记学生资料\t\t\t2.删除学生资料\n"); printf("\t3.查询学生资料\t\t\t4.修改学生资料\n"); printf("\t5.显示学生资料\t\t\t6.统计学生资料\n"); printf("\t7.排序语文成绩\t\t\t8.排序数学成绩\n"); printf(...
  • 某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,参考第11周在线测验中“学生成绩管理系统V2.0”,用二维字符数组作函数参数编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号、...
  • 篇一:2016年计算机二级Access真题及答案2016年计算机二级Access真题及答案在考生文件夹下有一个数据库文件"samp2.mdb",里面已经设计好两个表对象住宿登记"tA"和住房信息表"tB"。请按以下要求完成设计:(1)创建一个...
  • 比如: 1、四川:2020年4月,四川省教育厅发布根据《教育厅关于规范2020年全省普通中小学招生入学工作的通知》表明省级示范性普通高中不得举办复读班,举办复读班的学校要严格登记学生信息情况。 2、贵州:2020年4月...
  • //未登记成绩 else EditMath->Text=TmpStu->Math; if(TmpStu->Chinese==-1) EditChinese->Text=""; else EditChinese->Text=TmpStu->Chinese; if(TmpStu->English==-1) EditEnglish->Text=""; else ...
  • Python3实现简易学生选课系统

    千次阅读 多人点赞 2019-05-18 20:06:57
    1、要求说明 系统可教师学生双端登录。老师可以在该系统创建课程和给参与课程的学生打分...教师登录注册创建课程登记成绩 学生终端 学生登录注册选课查询成绩查询学分 ②创建教师、学生、课程三个类。 教师类 教师姓...
  •  cout请输入要查询学生姓名:";  cin>>fname;  int ID=-1;  for(int i=0;i;i++)  if(fname[0]==name[i][0]) //首字母匹配,继续匹配  { int count=0;  int L=strlen(name[i]);  for(int j=0;j;j++...
  • 在省外就读的学生及符合我省高考报名条件并愿意回户籍地参加高考报名的同等学力考生和社会青年等,须持报名当天申领的“健康通行码”和微信“国务院客户端”防疫行程卡截图到指定报名点进行现场拍照确认,同时在报名...
  • ②计生情况加分: 市卫健部门对申请入学儿童、少年的家庭计划生育信息核验结果为独生子女的,加2分,非独生子女及信息有误(含未登记信息)不加分。 ③户证情况加分: 符合以下条件之一的,加0.5分:申请入学儿童、...
  • 小学学校学生管理制度汇编小学学校学生管理制度汇编一、学生管理制度1.学校按照《河北省普通小学学籍管理办法(试行)》的相关规定,严格执行学生入学资格及学籍管理制度。学校建立健全学生学籍管理制度及学生成长档案...
  • 浙江的高考中考已经结束了,下面就是验收成果的时候,毕竟如果考试不错的话,大家就可以和自己的父母要求来一场旅行了,所以成绩就有如此重要,下面就一起去看看相关的成绩是怎么回事吧。已经出炉的分数线北仑第一批...
  • 1.管理员主要功能有学生管理,课程管理,奖惩管理,综合素质登记成绩管理。 2.学生主要功能有,修改个人信息,包括首次修改默认密码,学生选课,成绩查看,绩点查询。 3.页面使用Bootstrap框架和EasyUI,后台...
  • c语言学生信息管理系统(基于文件、链表)

    万次阅读 多人点赞 2013-12-14 13:43:52
    /************************************************************** 要求: 1、管理学生的信息,包括,学号,姓名,... 按学号、姓名查询学生信息 4、能进行科目成绩排序,科目分数段查询 附data文件实例: 001 小黑
  • 学生信息管理系统Android源码,使用博文https://blog.csdn.net/sinat_34608734/article/details/74136271 给出...非常感谢博主Dragonxxl,向前辈学习了,因为博主并提供工程源码,看到有不少人在问,正好我练习用到了
  • 基于C++的学生信息管理系统的实现

    千次阅读 多人点赞 2020-07-03 09:37:01
    在完成一学期的C++语言学习之后,写一个学生信息管理系统来丰富自己的实战经验。 课设内容的要求有主菜单模块、输入模块、查询模块、更新模块、排序模块、统计模块和输出模块,并且通过主菜单模块调用各个子模块。 ...

空空如也

空空如也

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

查询未登记成绩的学生