精华内容
下载资源
问答
  • 要求自定义结构体存储学生信息学生信息包括学生姓名与学生成绩。然后编写函数完成对指定姓名的学生信息查找,找到后打印学生信息,函数原型为: <code>STU * find(STU * aStu, int n,...
  • C语言结构体的操作

    2020-12-16 16:36:28
    有个同学让我帮忙做一下他的C语言作业,是用结构体来管理学生成绩,在前面也写过一个学生管理系统,比较系统(点我跳至),相比于来说这是很简单一个项目,但是以前都是听说结构体,没有实际应用过,下午便边学边写...

    C语言对于结构体的赋值 输出操作

    有个同学让我帮忙做一下他的C语言作业,是用结构体来管理学生成绩,在前面也写过一个学生管理系统,比较系统(点我跳至),相比于来说这是很简单一个项目,但是以前都是听说结构体,没有实际应用过,下午便边学边写试了一下,也不亏一个多小时的百度,最后还是写出来了了

    1. 先看一下题目要求
      有N个学生,每个学生的数据包括学号、姓名、M门课的成绩,要求:
      ⑴ 从键盘输入N个学生的数据;
      ⑵ 求出每门课的平均成绩;
      ⑶ 求出每个学生的平均成绩;
      ⑷ 查找指定学号的成绩信息,有则输出成绩等信息,无则输出“查无此人”。
      运行结果示例:在这里插入图片描述
    2. 按照题目要求还是写出来了,可能不是很完美,但实现了基本功能,粘代码
    #include "iostream.h"
    #include "string.h"
    #include "stdio.h"
    
    #define N 4//这个应该是学生人数
    #define M 5//这个应该是课程数量
    
    int i,j;//定义循环变量
    int Average_score=0;//定义平均成绩
    char Query[1][12];//定义查询中间变量
    
    
    
    struct student
    {
     char num[12];
     char name[20];
     int score[M];
    };
    
    void input(struct student stu[])//学生信息输入
    {
    	printf("请输入学生情况:\n");
    	printf("学号\t姓名\t课1\t课2\t课3\t课4\t课5\t\n");
    	for(i=0;i<4;++i)//四名同学 循环四次
    	{
    		scanf("%s%s%d%d%d%d%d",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]);//结构体输入语句
    	}
    }
    
    void danke(struct student *p)
    {
    	printf("\n");
    	printf("输出单科结果:\n");
    	for(j=0;j<5;j++)//有5科 循环五次
    	{
    		Average_score = 0;//每次循环前必须置0 否则计算出错
    		for(i=0;i<4;i++)//有四名同学求这四名同学平均成绩得一个个取
    		{
    			Average_score = Average_score + p[i].score[j];//将取得的数与上一个取得的数相加
    		}
    		printf("课程%d平均分:%d\n",j+1,Average_score/5);//将四名同学的成绩之和除以5得平均成绩
    	}
    	printf("\n");
    }
    
    void everyone(struct student *p)
    {
    	printf("输出学生结果:\n");
    	for(i=0;i<4;i++)//有四名同学 循环四次
    	{
    		Average_score = 0;//此处对平均值赋值并无实际作用 为了增强代码美观性
    		Average_score = (p[i].score[0] + p[i].score[1] + p[i].score[2] + p[i].score[3] + p[i].score[4])/5;//将一名学生的成绩累加且除以5 得出平均成绩
    		printf("学生%s的平均分:%d\n",p[i].name,Average_score);//输出该生平均成绩
    	}
    	printf("\n");
    
    }
    
    void seek(struct student *p)
    {
    	printf("输入查成绩学生的学号:");
    	scanf("%s",Query[0]);//将用户输入要查询学生的姓名先存入这个二维数组 至于为什么用二维数组 因为方便
    	for(i=0;i<4;i++)//一共有四名同学 从第一名同学开始查询一直查询到第四名 期间若查询到被查询同学 进入下面if语句
    	{
    		if(strcmp(p[i].num, Query[0])==0)//strcmp一个比较字符串是否相同的函数 原型为:int strcmp(char *a, char *b); 若被比较的两个字符串相同则返回0
    		{
    			printf("查询结果:%s\n",p[i].name);
    			printf("课1\t课2\t课3\t课4\t课5\t\n");
    			printf("%d\t%d\t%d\t%d\t%d\n",p[i].score[0],p[i].score[1],p[i].score[2],p[i].score[3],p[i].score[4]);
    			break;
    		}
    
    	}
    	if(i==5)//如果最后i加完也就是四名同学全部查询完还是没有找到说明“查无此人”
    	{
    		printf("查无此人");
    	}
    
    }
    
    void main()
    {
     struct student stu[N];
     input(stu);
     danke(stu);
     everyone(stu);
     seek(stu);
    }
    //--------------Copy BaiYuQing Stdio--------------//
    //-------------------2020-12-16-------------------//
    
    展开全文
  • /***** 题目描述 ...然后输入n行,每行包含一个学生信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间空格隔开。 最后一行输入一个学号num 输出 若学号...

    /*****
    题目描述
    有一学生成绩表,包括学号、姓名、3门课程成绩。请实现如下查找功能:输入一个学生的学号,输出该学生学号、姓名、3门课程成绩

    输入
    首先输入一个整数n(1<=n<=100),表示学生人数;
    然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
    最后一行输入一个学号num

    输出
    若学号num存在,输出该学生的学号、姓名、3门课程成绩;若该学号不存在,则输出“Not Found”。

    样例输入 Copy
    3
    541207010188 Zhangling 89 78 95
    541207010189 Wangli 85 87 99
    541207010190 Fangfang 85 68 76
    541207010188
    样例输出 Copy
    541207010188 Zhangling 89 78 95
    *****/

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct xuesheng
    {
        char id[22];
        char name[22];
        int a,b,c;
    }student;
    int main()
    {
        int i,n;
        scanf("%d",&n);
        student stu1[n];
        for(i = 0;i<n;i++)
        {
            scanf("%s%s%d%d%d",&stu1[i].id,&stu1[i].name,&stu1[i].a,&stu1[i].b,&stu1[i].c);
        }
        char duixiang[22];
        scanf("%s",&duixiang);
        for(i = 0;i<n;i++)
        {
            if(strcmp(stu1[i].id,duixiang) == 0)
            break;
        }
        if(i == n)
        printf("Not Found\n");
        else
        printf("%s %s %d %d %d",stu1[i].id,stu1[i].name,stu1[i].a,stu1[i].b,stu1[i].c);
        return 0;
    }
    
    
    展开全文
  • C语言课程设计)学生选修课程系统设计

    千次阅读 多人点赞 2020-01-12 00:59:36
    1、需求分析 系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息文件保存,因而要提供文件...数据结构采用结构体,这里采用课程信息结构体学生选课信息结构体。 Struct { Char course...

    1、需求分析

    系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。

    2、总体设计

    整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。

    3、详细设计

    数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。
    Struct
    {
    Char courseCode[10]; //课程编号
    Char courseName[20]; //课程名称
    Char courseType[10]; //课程类别
    Int totalPeriod; //总学时
    Int classPeriod; //授课学时
    Int experiPeriod; //上机学时
    Float creditHour; //学分
    Int term; //开课学期
    }CourseInfo[N]; //课程信息结构体
    Struct
    {
    Int stuNo; //学号;
    Char courseCode[10]; //课程编号
    }StuCourInfo[N]; //学生选课信息结构体
    (1) 信息输入模块
    从键盘输入课程信息和学生选课信息,写入文件。(fwrite, fprintf)
    (2)信息浏览模块
    分屏显示课程信息,每屏10条课程记录,按任意键继续。从文件中读数据(fread,fscanf),然后再显示。
    (3)信息查询模块
    通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。
    可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。

    4、编程实现

    开发环境:Code::Blocks 13.12
    说明:为了简化,本程序约定程序运行后,首先就必须先把所有数据输入,之后就不能再输入数据了。输入的数据会以文件的形式出现在和本程序文件同目录的文件夹内。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    /*
        约定程序运行后,首先就必须先把所有数据输入,之后就不能再输入数据了。
    */
    
    struct CourseInfo {
        char courseCode[10];    //课程编号
        char courseName[20];    //课程名称
        char courseType[10];    //课程类别
        int  totalPeriod;       //总学时
        int  classPeriod;       //授课学时
        int  experiPeriod;      //上机学时
        float creditHour;      //学分
        int  term;              //开课学期
    };
    
    struct StuCourInfo {
        int stuNo;              //学号;
        char courseCode[10];    //课程编号
    };
    
    struct CourseInfo courses[100];
    struct StuCourInfo stus[100];
    
    int courseCnt = 0; // 录入的课程数目
    int stuCnt = 0;    // 录入的学生选课数目
    
    // 程序入口
    void go();
    
    // 打印菜单
    void menu();
    
    // 录入数据
    void input();
    
    // 浏览课程数据
    void browseCourses();
    
    // 查询选课
    void getSelectedCourses();
    
    // 查询课程信息
    void getCourseInfo();
    
    int main(){
        go();
        return 0;
    }
    
    void go(){
        while(true){
            menu();
            printf("请按照菜单提示输入您的操作编号:\n");
            int choice = 0;
            scanf("%d", &choice);
            if(choice == 0){
                printf("您已经退出系统!\n");
                return;
            }else if(choice == 1){
                input();
            }else if(choice == 2){
                browseCourses();
            }else if(choice == 3){
                getCourseInfo();
            }else if(choice == 4){
                getSelectedCourses();
            }else{
                printf("输入错误!\n");
            }
        }
    }
    
    void menu(){
        printf("***选课系统***\n");
        printf("1-->录入数据\n");
        printf("2-->浏览课程\n");
        printf("3-->查询课程\n");
        printf("4-->查询选课\n");
        printf("0-->退出\n");
    }
    
    void input(){
        printf("11-->录入课程数据\n");
        printf("12-->录入选课数据\n");
        printf("请输入录入您的选择(11/22):\n");
        int choice = 0;
        scanf("%d", &choice);
        int cnt = 0;
        printf("请输入录入数据条数:\n");
        scanf("%d", &cnt);
        if(choice == 11){
            courseCnt = cnt;
            printf("请录入课程信息(格式示例:1 C语言 编程语言 30 20 10 1 1):\n");
            for(int i = 0; i < cnt; i++){
                scanf("%s", &courses[i].courseCode);
                scanf("%s", &courses[i].courseName);
                scanf("%s", &courses[i].courseType);
                scanf("%d", &courses[i].totalPeriod);
                scanf("%d", &courses[i].classPeriod);
                scanf("%d", &courses[i].experiPeriod);
                scanf("%f", &courses[i].creditHour);
                scanf("%d", &courses[i].term);
            }
    
            FILE * fp=fopen ("course.txt", "w") ; //打开文件
            if(NULL==fp)
            {
                printf ("Failed to open the file !\n");
                exit(0);
            }
    
            for(int i = 0; i < cnt; i++){
                fputs(courses[i].courseCode, fp);
                fputs(" ", fp);
                fputs(courses[i].courseName, fp);
                fputs(" ", fp);
                fputs(courses[i].courseType, fp);
                fputs(" ", fp);
    
                char strTotalPeriod[10];
                itoa(courses[i].totalPeriod, strTotalPeriod, 10);
                fputs(strTotalPeriod, fp);
                fputs(" ", fp);
    
                char strClassPeriod[10];
                itoa(courses[i].classPeriod, strClassPeriod, 10);
                fputs(strClassPeriod, fp);
                fputs(" ", fp);
    
                char strExperiPeriod[10];
                itoa(courses[i].experiPeriod, strExperiPeriod, 10);
                fputs(strExperiPeriod, fp);
                fputs(" ", fp);
    
                char strCreditHour[10];
                sprintf(strCreditHour, "%.1f", courses[i].creditHour);
                fputs(strCreditHour, fp);
                fputs(" ", fp);
    
                char strTerm[10];
                itoa(courses[i].term, strTerm, 10);
                fputs(strTerm, fp);
                fputs("\n", fp);
            }
            fclose(fp); //关闭文件
            printf("数据已经录入完毕!\n");
        }else if(choice == 12){
            stuCnt = cnt;
            printf("请录入选课信息(格式示例:201901 1):\n");
            for(int i = 0; i < cnt; i++){
                scanf("%d", &stus[i].stuNo);
                scanf("%s", &stus[i].courseCode);
    
            }
    
            FILE * fp=fopen ("student.txt", "w") ; //打开文件
            if(NULL==fp)
            {
                printf ("Failed to open the file !\n");
                exit(0);
            }
    
            for(int i = 0; i < cnt; i++){
                char strStuNo[10];
                itoa(stus[i].stuNo, strStuNo, 10);
                fputs(strStuNo, fp);
                fputs(" ", fp);
    
                fputs(stus[i].courseCode, fp);
                fputs(" ", fp);
    
                fputs("\n", fp);
            }
            fclose(fp); //关闭文件
            printf("数据已经录入完毕!\n");
        }else{
            printf("输入错误!\n");
        }
        printf("\n");
    }
    
    void browseCourses(){
        printf("课程信息如下(每次显示10个,按任意键继续显示):");
        FILE * fp=fopen ("course.txt", "r") ; //打开文件
        if(NULL==fp)
        {
            printf ("Failed to open the file !\n");
            exit(0);
        }
    
        for(int i = 0; i < courseCnt; i++){
            fscanf(fp, "%s %s %s %d %d %d %f %d\n",
                   &courses[i].courseCode,
                   &courses[i].courseName,
                   &courses[i].courseType,
                   &courses[i].totalPeriod,
                   &courses[i].classPeriod,
                   &courses[i].experiPeriod,
                   &courses[i].creditHour,
                   &courses[i].term);
        }
        fclose(fp); //关闭文件
    
        for(int i = 0; i < courseCnt; i++){
            if(i != 0 && (i%10 == 0)){
                printf("请输入任意键,继续显示...\n");
                getchar();
                getchar();
            }
            printf("%s %s %s %d %d %d %f %d\n",
                   courses[i].courseCode,
                   courses[i].courseName,
                   courses[i].courseType,
                   courses[i].totalPeriod,
                   courses[i].classPeriod,
                   courses[i].experiPeriod,
                   courses[i].creditHour,
                   courses[i].term);
        }
        printf("数据已经全部显示!\n\n");
    }
    
    void getSelectedCourses(){
        printf("请输入课程号:\n");
        char classCode[10];
        scanf("%s", classCode);
        printf("选修课程号为%s的学生如下:\n", classCode);
        FILE * fp=fopen ("student.txt", "r") ; //打开文件
        if(NULL==fp)
        {
            printf ("Failed to open the file !\n");
            exit(0);
        }
        for(int i = 0; i < stuCnt; i++){
            fscanf(fp, "%d %s\n", &stus[i].stuNo, &stus[i].courseCode);
        }
        fclose(fp); //关闭文件
        for(int i = 0; i < stuCnt; i++){
            if(strcmp(classCode, stus[i].courseCode) == 0){
                printf("%d\n", stus[i].stuNo);
            }
        }
        printf("数据已经全部显示!\n\n");
    }
    
    void getCourseInfo(){
        printf("31-->根据课程编号查询课程\n");
        printf("32-->根据课程名称查询课程\n");
        printf("33-->根据课程类别查询课程\n");
        printf("34-->根据开课学期查询课程\n");
        printf("35-->根据课程学分查询课程\n");
    
        FILE * fp=fopen ("course.txt", "r") ; //打开文件
        if(NULL==fp)
        {
            printf ("Failed to open the file !\n");
            exit(0);
        }
    
        for(int i = 0; i < courseCnt; i++){
            fscanf(fp, "%s %s %s %d %d %d %f %d\n",
                   &courses[i].courseCode,
                   &courses[i].courseName,
                   &courses[i].courseType,
                   &courses[i].totalPeriod,
                   &courses[i].classPeriod,
                   &courses[i].experiPeriod,
                   &courses[i].creditHour,
                   &courses[i].term);
        }
        fclose(fp); //关闭文件
    
        printf("请输入您的查询条件编号:\n");
        int choice = 0;
        scanf("%d", &choice);
        if(choice == 31){
            printf("请输入课程编号:\n");
            char courseCode[10];
            scanf("%s", courseCode);
            for(int i = 0; i < courseCnt; i++){
                if(strcmp(courseCode, courses[i].courseCode) == 0){
                    printf("%s %s %s %d %d %d %f %d\n",
                       courses[i].courseCode,
                       courses[i].courseName,
                       courses[i].courseType,
                       courses[i].totalPeriod,
                       courses[i].classPeriod,
                       courses[i].experiPeriod,
                       courses[i].creditHour,
                       courses[i].term);
                }
            }
            printf("数据已经全部显示!\n");
        }else if(choice == 32){
            printf("请输入课程名称:\n");
            char courseName[10];
            scanf("%s", courseName);
            for(int i = 0; i < courseCnt; i++){
                if(strcmp(courseName, courses[i].courseName) == 0){
                    printf("%s %s %s %d %d %d %f %d\n",
                       courses[i].courseCode,
                       courses[i].courseName,
                       courses[i].courseType,
                       courses[i].totalPeriod,
                       courses[i].classPeriod,
                       courses[i].experiPeriod,
                       courses[i].creditHour,
                       courses[i].term);
                }
            }
            printf("数据已经全部显示!\n");
        }else if(choice == 33){
            printf("请输入课程类别:\n");
            char courseType[10];
            scanf("%s", courseType);
            for(int i = 0; i < courseCnt; i++){
                if(strcmp(courseType, courses[i].courseType) == 0){
                    printf("%s %s %s %d %d %d %f %d\n",
                       courses[i].courseCode,
                       courses[i].courseName,
                       courses[i].courseType,
                       courses[i].totalPeriod,
                       courses[i].classPeriod,
                       courses[i].experiPeriod,
                       courses[i].creditHour,
                       courses[i].term);
                }
            }
            printf("数据已经全部显示!\n");
        }else if(choice == 34){
            printf("请输入开课学期:\n");
            int term = 0;
            scanf("%d", &term);
            for(int i = 0; i < courseCnt; i++){
                if(term == courses[i].term){
                    printf("%s %s %s %d %d %d %f %d\n",
                       courses[i].courseCode,
                       courses[i].courseName,
                       courses[i].courseType,
                       courses[i].totalPeriod,
                       courses[i].classPeriod,
                       courses[i].experiPeriod,
                       courses[i].creditHour,
                       courses[i].term);
                }
            }
            printf("数据已经全部显示!\n");
        }else if(choice == 35){
            printf("请输入学分:\n");
            float creditHour = 0.0;
            scanf("%f", &creditHour);
            for(int i = 0; i < courseCnt; i++){
                if(creditHour == courses[i].creditHour){
                    printf("%s %s %s %d %d %d %f %d\n",
                       courses[i].courseCode,
                       courses[i].courseName,
                       courses[i].courseType,
                       courses[i].totalPeriod,
                       courses[i].classPeriod,
                       courses[i].experiPeriod,
                       courses[i].creditHour,
                       courses[i].term);
                }
            }
            printf("数据已经全部显示!\n");
        }else{
            printf("输入错误!\n");
        }
        printf("\n");
    }
    
    

    5、演示

    为了演示方便,可以先构造一些数据放入data.txt文件内,后续录入数据的时候可以直接复制粘贴到控制台。

    1 C语言 编程语言  30 20 10 1.0 1
    2 C语言 编程语言  30 20 10 1.0 1
    3 C语言 编程语言  30 20 10 1.0 1
    4 C语言 编程语言 30 20 10 1.0 1
    5 C语言 编程语言 30 20 10 1.0 1
    6 C语言 编程语言 30 20 10 1.0 1
    7 C语言 编程语言 30 20 10 1.0 1
    8 C语言 编程语言 30 20 10 1.0 1
    9 C语言 编程语言 30 20 10 1.0 1
    10 C语言 编程语言 30 20 10 1.0 1
    11 C语言 编程语言 30 20 10 1.0 1
    12 C语言 编程语言 30 20 10 1.0 1
    13 C语言 编程语言 30 20 10 1.0 1
    14 C语言 编程语言 30 20 10 1.0 1
    15 C语言 编程语言 30 20 10 1.0 1
    16 C语言 编程语言 30 20 10 1.0 1
    17 C语言 编程语言 30 20 10 1.0 1
    18 C语言 编程语言 30 20 10 1.0 1
    19 C语言 编程语言 30 20 10 1.0 1
    20 C语言 编程语言 30 20 10 1.0 1
    21 C语言 编程语言 30 20 10 1.0 1
    22 C语言 编程语言 30 20 10 1.0 1
    23 C语言 编程语言 30 20 10 1.0 1
    24 C语言 编程语言 30 20 10 1.0 1
    
    201901 1 
    201902 1 
    201903 1 
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 要求有5个功能。1 输入功能:录入学生信息; 2 显示功能:完成学生记录的显示; 3 查找功能:完成... 利用结构体数组实现学生信息的数据结构设计,且各个功能模块函数的形式实现。(加注释的话更好)
  • 涉及到的:指针申请内存 结构体数据...设计:学生信息 学号 名字 年龄 成绩(结构体)1、数据 数组存放学生信息 顺序表(数组+size+len实现) 链表(结构体指针实现)2、增删查改3、菜单 +提示 +界面 注册 -->...

    涉及到的:
    指针申请内存 结构体
    数据结构部分
    排序
    文件操作

     

    vs2013
    数据结构 排序 结构体 指针

    功能:
    1、人工录入信息
    2、删除
    3、查找
    4、修改
    5、全部显示
    6、文件的读取和保存
    7、排序

    设计:
    学生信息 学号 名字 年龄 成绩(结构体)
    1、数据 用数组存放学生信息 顺序表(数组+size+len实现) 链表(结构体指针实现)
    2、增删查改
    3、菜单 +提示 +界面

    注册 -->注册的用户 密码 存到文件
    登录 输入用户名和密码 到文件中找有没有匹配的记录

     

    首先在项目编写过程中,将需要的功能,函数等思路罗列清楚。

    大致分为以下四个板块

    //******头文件  宏定义 类型定义 全局变量********

    //******************函数声明*************************

    //*****************主函数****************************

    //******************函数定义************************

     

    第一步,对学生信息的录入工作

    先将学生属性用结构体存放

    将所用到的函数首先在函数声明部分进行声明,之后再函数定义部分对所用到的函数进行定义,并在需要的时候进行调用。

    最先做好的部分就是菜单和信息录入

    测试结果如下所示:

    发现输出有一点问题,之后再做修改。

    具体测试代码笔记如下:

      1 //****************头文件  宏定义 类型定义 全局变量********************
      2 #include<stdio.h>
      3 #include<windows.h>
      4 #include<stdlib.h>
      5 #include<string.h>
      6 #include<WinBase.h>
      7 
      8 //学生基本信息
      9 typedef struct student
     10 {
     11     char stuNum[12];//学号
     12     char name[20];//名字
     13     int age;//年龄
     14     float grade;//成绩
     15     //后续可以继续加
     16 
     17     struct student*next;//如果用数组存 那么不需要指针域  链表存 需要指针域
     18 }STU,*PSTU;
     19 //****************函数声明********************
     20 void menu();//菜单
     21 void insertStu(PSTU head);//录入
     22 void findMenu(PSTU head);//查询用菜单
     23 void findByAge(PSTU head);//根据年龄查找信息
     24 //void changeStu();//修改
     25 void printAll(PSTU head);//全部打印
     26 //---------------------------------主函数
     27 void deleStuByNum(PSTU head);//通过学号删除学员信息
     28 
     29 void sortByGrade(PSTU head);//按照分数排序
     30 
     31 void swap(PSTU a, PSTU b); //交换两个节点
     32 
     33 void insertFile(PSTU head);//从文件中读取内容
     34 
     35 void setFile(PSTU head);//存档
     36 
     37 void freeNode(PSTU head);//释放所有节点
     38 
     39 void deleStuByGrade(PSTU head);//通过成绩删除
     40 
     41 //******************主函数********************
     42 int main()
     43 {
     44 
     45     menu();
     46     return 0;
     47 }
     48 
     49 //****************函数定义********************
     50 //菜单
     51 void menu()
     52 {
     53     //链表 
     54     PSTU head=(PSTU)malloc(sizeof(STU));//定义头指针
     55     head->next = NULL;//头结点的next赋值NULL
     56     //录入文件   打开文件并且读取文件内容  (没写完 待补充  )***************
     57     insertFile(head);//读取文件内容
     58     while (1)//循环一直进行
     59     {
     60         system("cls");//清屏函数 用于控制台的
     61         printf("**************************\n");
     62         printf("****欢迎进入学生管理系统****\n");
     63         printf("1.录入学生信息\n");
     64         printf("2.查询学生信息\n");
     65         printf("3.修改学生信息\n");
     66         printf("4.删除学生信息\n");
     67         printf("5.打印所有学生信息\n");
     68         printf("6.排序\n");
     69         printf("0.退出\n");
     70         printf("输入你的选择\n\n");
     71         int choice = -1;
     72         scanf("%d", &choice);//获取用户用户的操作
     73         switch (choice)
     74         {
     75         case 1://录入
     76             insertStu(head);//传递实参
     77             break;
     78         case 2://查询
     79             findMenu(head);//查询
     80             break;
     81         case 3://修改  先查询  找到位置之后 再修改
     82             //不写
     83             break;
     84         case 4://删除  //示例用学号删除学生信息
     85             deleStuByNum(head);
     86             break;
     87         case 5://全部打印
     88             printAll(head);
     89             break;
     90         case 6:
     91             //链表的排序
     92             //默认用学号排序   换成用分数排序
     93             sortByGrade(head);
     94             break;
     95         case 0://退出程序
     96             /*
     97             跳转语句   goto
     98             return //跳出这个循环
     99             break//跳出循环 跳出swicth
    100             continue//跳过本轮循环 进入下一轮循环
    101             exit(0);//函数  表示退出这个程序   stdlib.h
    102             */
    103             //--------------------=========//跳出循环
    104             setFile(head);//退出前存档
    105             //存挡  当前所有内容 写入文件(待补充,,,,,,,,,,,>
    106             //释放所有节点内存(待补充-------------------->
    107             freeNode(head);//释放这个链表所有结点
    108             return;//跳出这个函数
    109             break;
    110         default:
    111             //输入错误
    112             //重新输入
    113             printf("输入错误 请重新输入\n");
    114             Sleep(2000);//休息两秒  Windows.h
    115             //....
    116             break;
    117         }
    118     }
    119 }
    120 
    121 //录入
    122 void insertStu(PSTU head)
    123 {
    124     PSTU p = (PSTU)malloc(sizeof(STU));
    125     printf("输入学生信息");
    126     printf("输入学号"); scanf("%s", p->stuNum);//录入
    127     printf("输入姓名"); scanf("%s", p->name);
    128     printf("输入年龄"); scanf("%d", &p->age);
    129     printf("输入成绩"); scanf("%f", &p->grade);
    130     //输入完成之后  连接
    131     //p->next = head->next;
    132     //head->next = p;//头插
    133     
    134     ///插入的时候同时进行排序
    135     PSTU temp = head;
    136     //插入到合适的位置
    137     while (temp->next != NULL)
    138     {
    139         if (strcmp(temp->next->stuNum, p->stuNum)>0)//找到第一个比他大的元素
    140         {
    141             break;
    142         }
    143         temp = temp->next;
    144     }
    145     //如果temp->next==NULL  插入放在里面的话这个节点不会被插入到链表中  因此放在外面
    146     p->next = temp->next;
    147     temp->next = p;//插入
    148     Sleep(1000);//看一下效果
    149 }
    150 
    151 //全部打印
    152 void printAll(PSTU head)
    153 {
    154     PSTU p = head->next;
    155     while (p != NULL)
    156     {
    157         printf("学号%10s\t名字%10s\t年龄%5d\t分数%.2f\n", p->stuNum, p->name, p->age, p->grade);
    158         p = p->next;
    159     }
    160     //printf("学号\t\t名字\t\t年龄\t\t分数\n");//这个需要另外对齐
    161     //while (p != NULL)
    162     //{
    163     //    printf("%s\t%s\t%d\t%.2f\n", p->stuNum, p->name, p->age, p->grade);
    164     //    p = p->next;
    165     //}
    166     Sleep(2000);//休息一会
    167 }
    168 
    169 //查询用菜单
    170 void findMenu(PSTU head)
    171 {
    172     system("cls");
    173     printf("请输入你要查询的方式");
    174     printf("1.按照年龄查询");
    175 
    176     int choice;
    177     scanf("%d", &choice);
    178     switch (choice)
    179     {
    180     case 1://根据年龄查询
    181         //通过年龄区间 得到信息  可以写函数  也可以直接写 
    182         break;
    183     }
    184 }
    185 
    186 //根据年龄查找信息
    187 void findByAge(PSTU head)
    188 {
    189     //1.根据年龄查询
    190     //2.根据区间查询
    191     printf("请输入一个年龄区间");
    192     int x, y;//年龄
    193     scanf("%d %d", &x, &y);
    194     if (x >= y)
    195     {
    196         for (PSTU temp = head->next; temp != NULL; temp = temp->next)
    197         {
    198             if (temp->age >= y&&temp->age <= x)
    199             {
    200                 printf("学号%10s\t名字%10s\t年龄%5d\t分数%.2f\n", temp->stuNum, temp->name, temp->age, temp->grade);
    201             }
    202         }
    203     }
    204     else//x<=y
    205     {
    206         //自己补齐
    207     }
    208     Sleep(2000);
    209 }
    210 
    211 //通过学号删除学员信息
    212 void deleStuByNum(PSTU head)
    213 {
    214     PSTU p = head;
    215     char stuNum[20];
    216     printf("输入你要删除的学员的学号");
    217     scanf("%s", stuNum);
    218     //删除一个节点  要删除位置前面的结点
    219 
    220     //for (; p->next != NULL; p = p->next)
    221     //{
    222     //    if (strmp(p->next->stuNum, stuNum) == 0)
    223     //    {
    224     //        break;
    225     //    }
    226     //}
    227     //if (p->next!=NULL)
    228     //{
    229     //    PSTU q = p->next;
    230     //    p->next = q->next;
    231     //    free(q);//释放结点
    232     //    //如果多个学号相同的同学
    233     //    printf("删除成功");
    234     //}
    235     //else
    236     //{
    237     //    printf("找不到对应的记录 删除失败\n");
    238     //}
    239 
    240     for (; p->next != NULL; )
    241     {
    242         if (strcmp(p->next->stuNum, stuNum) == 0)
    243         {
    244             PSTU q = p->next;
    245             p->next = q->next;
    246             free(q);//释放结点
    247             //如果多个学号相同的同学
    248         //printf("删除成功");
    249         }
    250         else
    251         {
    252             p = p->next;//这句不直接放在外面的原因  避免少比较一个元素
    253             //比如说   A->B->C->D
    254             //p 刚刚开始指向A  删除B之后 A->C->D
    255             //p往后移动  C就没有参与比较  所以为了避免这种情况  p=p->next放在else中
    256         }
    257     }
    258     Sleep(2000);
    259 }
    260 
    261 //按照分数排序
    262 void sortByGrade(PSTU head)
    263 {
    264     //冒泡 插入  选择 快速
    265     // 冒泡  从头到尾  如果相邻元素位置有问题  交换
    266     //插入 将后面的一个结点插入到前面的有序位置中
    267     //选择 交换两个节点  每次找剩下那个最小的进行交换
    268     //快速  一分为2  分开进行快速排序
    269 
    270     //快速    冒泡   选择 交换
    271     //做法 :找到两个位置  进行交换
    272     
    273     //链表的循环条件稍微改一下 
    274     //选择排序
    275     PSTU p = head->next;//第一个节点
    276     PSTU q, min;
    277     while (p != NULL)
    278     {
    279         min = p;//刚刚开始指向p的位置
    280         q = p->next;//从p的后面开始找
    281         while (q != NULL)
    282         {
    283             //if (strcmp(q->stuNum, min->stuNum) < 0)
    284             if (q->grade<min->grade)
    285             {
    286                 min = q;//标记最小
    287             }
    288             q = q->next;
    289         }
    290         if (min == NULL||min == p);//不需要交换
    291         else swap(p, min);//交换两个节点的数据
    292         p = p->next;
    293     }
    294 
    295 
    296 }
    297 
    298 //交换两个节点  写一个函数 
    299 void swap(PSTU a, PSTU b)
    300 {
    301     char stuNum[12];//学号
    302     char name[20];//名字
    303     int age;//年龄
    304     float grade;//成绩
    305     strcpy(stuNum, a->stuNum);
    306     strcpy(a->stuNum, b->stuNum);
    307     strcpy(b->stuNum, stuNum);
    308     strcpy(name, a->name);
    309     strcpy(a->name, b->name);
    310     strcpy(b->name, name);
    311     age = a->age;
    312     a->age = b->age;
    313     b->age = age;
    314     grade = a->grade;
    315     a->grade = b->grade;
    316     b->grade = grade;
    317 }
    318 
    319 //文件操作   -->数据存放文件中(保留数据)
    320 //读档
    321 void insertFile(PSTU head)//从文件中读取内容
    322 {
    323     FILE *fp = fopen("student.txt", "r");//rwa  三选一
    324     //r  文件不存在 打开失败
    325     //w  文件不存在 创建文件  但是文件存在 清空文件内容
    326     if (fp == NULL)
    327     {
    328         fp = fopen("student.txt", "w");//创建新文件
    329         fclose(fp);
    330         return;
    331     }
    332     //学号 名字 年龄 成绩
    333     STU temp, *p;
    334     while (1)//循环读取
    335     {
    336         fscanf(fp, "%s %s %d %f", temp.stuNum, temp.name, &temp.age, &temp.grade);//读取内容
    337         if (feof(fp)) break;//如果文件读到末尾  返回1
    338         //feof  文件中有三个数据  当读完第三个数据的时候不会返回1
    339         //读到第四个的时候有问题
    340 
    341         p = (PSTU)malloc(sizeof(STU));
    342         *p = temp;//赋值
    343         //将这个节点 连到链表上
    344         PSTU q = head;
    345         //插入到合适的位置
    346         while (q->next != NULL)
    347         {
    348             if (strcmp(q->next->stuNum, p->stuNum)>0)//找到第一个比他大的元素
    349             {
    350                 break;
    351             }
    352             q = q->next;
    353         }
    354         //如果temp->next==NULL  插入放在里面的话这个节点不会被插入到链表中  因此放在外面
    355         p->next = q->next;
    356         q->next = p;//插入
    357 
    358     }
    359     fclose(fp);//关闭文件
    360 
    361 }
    362 
    363 //存档
    364 void setFile(PSTU head)
    365 {
    366     //写入  w a
    367     FILE *fp = fopen("student.txt", "w");//清空原内容
    368     PSTU p = head->next;
    369     while (p != NULL)
    370     {
    371         fprintf(fp,"%s %s %d %.2f\n", p->stuNum, p->name, p->age, p->grade);//写入文件
    372         p = p->next;
    373     }
    374     fclose(fp);
    375 }
    376 
    377 void freeNode(PSTU head)//释放所有节点
    378 {
    379     PSTU temp = head;
    380     while (head != NULL)
    381     {
    382         temp = head;
    383         head = head->next;
    384         free(temp);//释放节点
    385     }
    386 }
    387 
    388 //通过成绩删除
    389 void deleStuByGrade(PSTU head)
    390 {
    391     PSTU arr[10];
    392     int len = 0;
    393     int size = 10;
    394     //准备数组
    395     float Grade;
    396     printf("输入的你要删除的学生的成绩");
    397     scanf("%f", &Grade); //取地址
    398     PSTU p = head->next;
    399     while (p != NULL)
    400     {
    401         if (p->grade < Grade + 3 && p->grade>Grade - 3)// 浮点型 存的都是近似值  给一个区间
    402         {
    403             if (len < size) arr[len++] = p;//存放符合要求一个结点的位置
    404         }
    405     }
    406     //找到所有符合要求的节点
    407     for (int i = 0; i < len; ++i)
    408     {
    409         printf("编号%d--->学号%s,姓名%s,年龄%d,成绩%.2f",i, arr[i]->stuNum, arr[i]->name, arr[i]->age, arr[i]->grade);
    410     }
    411     printf("输入你要删除的元素的编号");
    412     int choice;
    413     scanf("%d", &choice);
    414     if (choice >= 0 && choice < len)//说明有删除的元素
    415     {
    416         //找到结点并且删除就可以了
    417         //arr[choice];//结点的地址
    418         //找前面那个结点  然后删除
    419         PSTU temp = head;
    420         while (temp!=NULL)
    421         {
    422             //找要删除的前面那个结点的位置
    423             if (temp->next == arr[choice])
    424             {
    425                 temp->next = arr[choice]->next;
    426                 free(arr[choice]);
    427                 break;
    428             }
    429             temp = temp->next;
    430         }
    431     }
    432 }
    433 /*
    434 //指针申请内存  结构体
    435 //数据结构部分
    436 //排序
    437 
    438 time 函数
    439 gettickcount
    440 
    441 
    442 开始获取一次时间  结束的获取一次时间
    443 时间差  --->运行时间
    444 
    445 //测试
    446 DWORD time1 = GetTickCount();
    447 Sleep(2000);
    448 DWORD time2 = GetTickCount();
    449 printf("%ld", time2 - time1);
    450 getchar();
    451 
    452 
    453 
    454 1.算法优化 -->排序 
    455 2.存储优化  --->数组  单链表   双链表
    456     数组  省内存  中间插入 开头插入 比较麻烦  尾端插入效率高
    457             查找  访问从前往后 也可以从后往前
    458     单链表 插入很方便  内存不是很省  没有长度限制
    459             访问 不是很方便
    460     双链表  插入方便  内存不是很省  
    461             访问可以从前往后 也可以从后往前
    462 3.计算  右移代替除以2 

    注:其中部分功能并没有实现,还有一些是需要补充的,等以后有时间再补充吧

    部分成功展示:

    2019-04-04  10:19:07

     

    转载于:https://www.cnblogs.com/Yuuki-/p/10653392.html

    展开全文
  • 用结构体数组或结构体指针,进行学生姓名,学号,成绩的管理,其中包括: ( 0) 退出成绩管理系统 ( 1) 输入学生资料信息 (2)显示学生资料信息 (3)对学生信息排序列 (4)查找删除显示资料 (5)平均...
  • 这是个c语言做的学生成绩管理系统 的是文件 结构体 链表 具体实现的功能有 分数的排序 学生信息的添加 删除 修改 查找 文件的备份 基本上学生关系系统要实现的功能基本上都有
  • printf("\n原来的学生信息:\n"); display();//调用显示函数 printf("\n"); printf("请输入要删除学生的姓名:\n"); scanf("%s",name); for(check=1,i=0;check&&i;i++) { if(strcmp(stu[i].name,name)...
  • 2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识; 3、系统的各个功能模块要求函数的形式实现; 4、界面友好(良好的人机交互),程序要有注释。 5、程序中所用到的排序查找方法需...
  • 2)子函数实现: 根据学号在结构体数组中查找学生信息,返回该学生所在的数组下标,若没找到则返回-1。主函数中输出该学生信息。 要求: 使用学号、结构体指针变量作为函数参数编程。 3)子函数实现:根据姓名在...
  • 用结构体指针完成学生信息录入。 2.用选择排序法对n个学生的成绩按照降序排列; 思想: 定义2个学生结构体指针,用选择法完成学生成绩排序。 3.利用栈和队列的算法操作,删除不及格的学生信息,保留及格学生...
  • 当然,有时,错误提示信息可以直接提供错误的所在,但是C语言自动查找错误的功能毕竟是有限的,大多数情况之下,我们还是必须要依靠自己。这时,经验就显的很重要了,我们在平时编写程序时,应多注意有意识地积累...
  • 能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。 1)按照卡号顺序进行排序; 2)能够实现查找某个系的所有的借书卡号并输出。 设计要求: (1)建立关于借书证信息结点的...
  • c语言通讯录

    2015-03-25 21:26:05
    printf("* * 1增加学生信息 ** 2查询学生信息 *\n"); printf("* * 3修改学生信息 ** 4按学号删除信息 *\n"); printf("* * 5保存当前信息 ** 6显示当前信息 *\n"); printf("* * 7退出系统 ** *\n"); printf("***...
  • c语言经典案例

    2014-10-30 08:06:57
    实例176 指针函数输出学生成绩 249 实例177 寻找相同元素的指针 251 实例178 查找成绩不及格的学生 252 实例179 使用指针实现冒泡排序 254 实例180 输入月份号并输出英文月份名 255 实例181 使用指针插入元素 256 ...
  •  本书不仅可以作为计算机及相关专业本科生“数据结构”课程的教材,也可以作为研究生第一学年的“高等数据结构”课程的教材,同时,本书所介绍的各种算法的C语言实现,对有关专业人员也具有很好的参考价值。...
  • 学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校计算机基础教育开拓者之一,现任全国高等院校计算机基础教育研究会会长、教育部全国计算机应用技术证书考试委员会主任委员。 谭浩强...
  • 学生信息要求使用结构体,采用顺序表实现上述要求,上述6个功能的程序分开编写,最后能够合在一起运行。每个功能可以设立菜单。 采用多种方法且算法正确者,可适当加分。 (数据文件的数据读写方法等相关内容在c语言...
  • 学生时代曾担任清华大学学生会主席、北京市人民代表。他是我国计算机普及和高校计算机基础教育开拓者之一,现任全国高等院校计算机基础教育研究会会长、教育部全国计算机应用技术证书考试委员会主任委员。 谭浩强...
  • 学生信息如下:\n"); printf("\n%10s %6s %6s \n","姓名","学号","c语言"); printf("%10s %6d %6.2f\n",xs.num,xs.num,xs.c); break; } } if(feof(fp)) ...
  • 第一天

    2013-09-10 20:34:05
    现在就我们学到的知识对一个学生信息进行操作,实现简单的学生信息管理系统。 我们使用简单的结构体结构体中有四个成员:姓名(name)、性别(sex)、年龄(age)、分数(score),然后冒泡法将学生年龄按照从大到小...
  • 查找学生信息 按成绩排序 保存到文件 从文件读数据 插入学生成绩 分类合计 退出系统 结束 详细设计: 整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、...
  • 《算法竞赛入门经典》可作为全国青少年信息学奥林匹克联赛(NOIP)的复赛教材及ACM国际大学。 第1部分 语言篇 第1章 程序设计入门 1 1.1 算术表达式 1 1.2 变量及其输入 3 1.3 顺序结构程序设计 6 1.4 分支结构程序...
  • 6.查找学生信息:根据用户给定的信息(学号)在系统中查找该学生的信息 7.修改学生信息 8.删除学生信息 0.退出系统 系统main函数,while循环在外,系统程序能够持续运行,switch判断语句进行功能选择与函数切换。 ...
  • //根据学号查找学生信息 student_info* search_student_info(int num); //输出每个学生的平均成绩 void display_average(); //显示所有学生信息 void display_student_info(); //将学生信息保存到文件 int ...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

c语言用结构体查找学生信息

c语言 订阅