对大一写的代码函数结构化(没有调整代码书写规范)

Posted king丶貔貅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对大一写的代码函数结构化(没有调整代码书写规范)相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define NUMSTU 5000     /*最大学生人数*/
#define NUMSCORE 4    /*成绩个数*/
#define NAMELEN 10    /*姓名的最大长度<10*/


/*主要数据结构*/
struct StudentInfo
{
    unsigned long no;       /*学号*/
    char name[NAMELEN];   /*姓名*/
    float score[NUMSCORE];   /*数学、语文、英语、平均成绩*/
};

struct StudentList
{
    struct StudentInfo List[NUMSTU];
    int excellentNum[3];           /*每科成绩为优秀(>=90)的人数*/
    char subject[NUMSCORE][NAMELEN]= {"数学","语文","英语","平均"};  /*科目*/
    int currentNumStu;  /*当前表中的学生人数*/
} Students;

char menuItem,subItem;        /*用户输入的菜单项*/
int i,j,l;
unsigned long tempNo;       //用于排序对调内存的中间变量
struct StudentInfo nostudent;
char tempName[NAMELEN],namewj[NUMSTU];
float  sum,k;
FILE *zp,*fp;

/*功能函数*/
void MainMenu();/*主菜单*/
void SortMenu();/*按学号升序或降序排列实现*/
void Creat();/*创建成绩单*/
void Add();/*添加学生*/
void Edit();/*编辑学生信息*/
void Delete();/*删除指定学号的学生信息*/
void Count();/*统计每科成绩>=90分以上的学生人数*/
void SortUp();/*升序排列*/
void SortDown();/*降序排列*/
void Show();/*显示学生信息*/
void AddFile();/*从文件添加学生信息*/
void ShowFile();/*先是学生信息到文件*/
void Choose();/*功能选择*/
void preinstall();/*结构体预设*/

int main()
{

    preinstall();
    do
    {
        MainMenu();
        Choose();
    }
    while(menuItem!=‘0‘);
    return 0;
}

void preinstall()
{
    Students.List[NUMSTU].no= {0};       /*学号*/
    Students.List[NUMSTU].score[NUMSCORE]= {0};   /*数学、语文、英语、平均成绩*/
    Students.excellentNum[3]= {0};           /*每科成绩为优秀(>=90)的人数*/
    Students.currentNumStu=0;
}

void MainMenu()//主菜单
{
    printf("|-------------------------------------------------------|\n");
    printf("|\t\t\t\t\t\t\t|\n");
    printf("|\t\t  请输入选项编号(0 ~~ 7):  \t\t|\n");
    printf("|\t\t\t\t\t\t\t|\n");
    printf("|-------------------------------------------------------|\n");
    printf("|\t\t\t\t\t\t\t|\n");
    printf("|\t\t    1——创建成绩单          \t\t|\n");
    printf("|\t\t    2——添加学生          \t\t|\n");
    printf("|\t\t    3——编辑学生          \t\t|\n");
    printf("|\t\t    4——删除学生          \t\t|\n");
    printf("|\t\t    5——统计成绩          \t\t|\n");
    printf("|\t\t    6——排序成绩单        \t\t|\n");
    printf("|\t\t    7——显示成绩         \t\t|\n");
    printf("|\t\t    8——从文件读入         \t\t|\n");
    printf("|\t\t    9——输出到文件         \t\t|\n");
    printf("|\t\t    0——退出                 \t\t|\n");
    printf("|-------------------------------------------------------|\n");

    printf("请输入选项编号(0 ~ 7): ");
    /*清除键盘缓冲区*/
    fflush(stdin);
    scanf("%c",&menuItem);
}

void SortMenu()
{
    /*按学号升序或降序排列实现*/
    printf("|---------------------------------------|\n");
    printf("|                                       |\n");
    printf("|               排序菜单                |\n");
    printf("|                                       |\n");
    printf("|---------------------------------------|\n");
    printf("|                                       |\n");
    printf("|          1——按学号升序排列          |\n");
    printf("|          2——按学号降序排列          |\n");
    printf("|---------------------------------------|\n");

    printf("请输入选项编号(1 ~2): ");
    fflush(stdin);
    scanf("%c",&subItem);

    switch(subItem)
    {
    case ‘1‘:
        SortUp();
        break;
    case ‘2‘:
        SortDown();
        break;
    default:
        printf("非法输入\n");
    }
}

void Creat()
{
    /*创建成绩单*/
    if(Students.currentNumStu>0)
    {
        printf("\n不能重新创建学生成绩单\n");
    }
    else
    {
        printf("注意:输入的结束标志为学号为0!\n");
        i=0;
        printf("请输入学号:");
        scanf("%lu",&Students.List[i].no);

        /*清除键盘缓冲区*/
        fflush(stdin);
        while(Students.List[i].no!=0&&Students.currentNumStu<NUMSTU)
        {
            printf("请输入姓名:");
            gets(Students.List[i].name);
            for(j=0; j<NUMSCORE-1; j++)
            {
                printf("请输入%s成绩:",Students.subject[j]);
                scanf("%f",&Students.List[i].score[j]);
            }

            /*计算平均成绩*/
            sum=0;
            for(j=0; j<NUMSCORE-1; j++)
                sum = sum+Students.List[i].score[j];
            Students.List[i].score[3] =  sum/3;

            Students.currentNumStu++;
            if(Students.currentNumStu==NUMSTU)
            {
                printf("成绩单已满!结束创建!!\n");
                break;
            }
            i++;

            printf("请输入学号:");
            scanf("%lu",&Students.List[i].no);
            /*清楚键盘缓冲区*/
            fflush(stdin);
        }
    }
}

void Add()
{
    /*添加学生*/
    if(Students.currentNumStu>=NUMSTU)
    {
        printf("成绩单已满!不可再加学生信息!!\n");
    }
    else
    {
        i=Students.currentNumStu;
        printf("请输入学号:");
        scanf("%lu",&Students.List[i].no);
        fflush(stdin);
        printf("请输入姓名:");
        gets(Students.List[i].name);
        for(j=0; j<NUMSCORE-1; j++)
        {
            printf("请输入%s成绩:",Students.subject[j]);
            scanf("%f",&Students.List[i].score[j]);
        }

        /*计算平均成绩*/
        sum=0;
        for(j=0; j<NUMSCORE-1; j++)
            sum = sum+Students.List[i].score[j];
        Students.List[i].score[3] =sum/3;
        Students.currentNumStu++;
        printf("添加成功!\n");
    }
}
void Edit()
{
    /*编辑学生信息*/
    scanf("%lu",&tempNo);
    for(i=0; i<Students.currentNumStu; i++)
        if(Students.List[i].no==tempNo)
            break;
    if(i!=Students.currentNumStu)
    {
        for(j=0; j<NUMSCORE-1; j++)
        {
            printf("请输入%s成绩:",Students.subject[j]);
            scanf("%f",&Students.List[i].score[j]);
        }

        /*计算平均成绩*/
        sum=0;
        for(j=0; j<NUMSCORE-1; j++)
            sum = sum+Students.List[i].score[j];
        Students.List[i].score[3] =sum/3;
        printf("编辑成功!\n");
    }
    else
        printf("不存在该学生!\n");
}

void Delete()
{
    /*删除指定学号的学生信息*/
    printf("请输入学号:");
    scanf("%lu",&tempNo);
    for(i=0; i<Students.currentNumStu; i++)
        if(Students.List[i].no==tempNo)
            break;
    if(i!=Students.currentNumStu)
    {
        for(; i<Students.currentNumStu-1; i++)
        {
            Students.List[i].no=Students.List[i+1].no;
            strcpy(Students.List[i].name,Students.List[i+1].name);
            for(j=0; j<NUMSCORE; j++)
            {
                Students.List[i].score[j]=Students.List[i+1].score[j];
            }
        }
        Students.currentNumStu--;
        printf("删除成功!\n");
    }
    else
        printf("不存在该学生!\n");
}

void Count()
{
    /*统计每科成绩>=90分以上的学生人数*/
    if(Students.currentNumStu==0)
        printf("目前无记录,请添加成绩单信息!\n");
    else
    {
        for(i=0; i<Students.currentNumStu; i++)
            for(j=0; j<NUMSCORE-1; j++)
            {
                if(Students.List[i].score[j]>=90)
                    Students.excellentNum[j]++;
            }
        printf("%10s%10s%10s\n","数学成绩","语文成绩","英语成绩");
        for(j=0; j<NUMSCORE-1; j++)
            printf("%10d",  Students.excellentNum[j]);
        printf("\n");
    }
}

void SortUp()
{
    /*升序排列*/
    if(Students.currentNumStu<2)
    {
        printf("成绩表中少于2人则不做排序!\n");
    }
    else
    {
        /*按学号升序排列*/
        for(i=0; i<Students.currentNumStu-1; i++)
            for(j=i+1; j<Students.currentNumStu; j++)
            {
                if(Students.List[i].no>Students.List[j].no)
                {
                    nostudent=Students.List[i];
                    Students.List[i]=Students.List[j];
                    Students.List[j]=nostudent;
                }
            }
        printf("排序结束,请选择菜单项显示信息!\n");
    }
}

void SortDown()
{
    /*降序排列*/
    if(Students.currentNumStu<2)
    {
        printf("成绩表中少于2人则不做排序!\n");
    }
    else
    {
        /*按学号降序排列*/
        for(i=0; i<Students.currentNumStu-1; i++)
            for(j=i+1; j<Students.currentNumStu; j++)
            {
                if(Students.List[i].no<Students.List[j].no)
                {
                    nostudent=Students.List[i];
                    Students.List[i]=Students.List[j];
                    Students.List[j]=nostudent;
                }
            }
        printf("排序结束,请选择菜单项显示信息!\n");
    }
}

void Show()
{
    /*显示学生信息*/
    if(Students.currentNumStu==0)
    {
        printf("无学生记录,请创建成绩单!\n");
    }
    else
    {
        printf("学生信息如下:\n");
        printf("%15s%15s%10s%10s%10s%10s\n","学号","姓名","数学成绩","语文成绩","英语成绩","平均成绩");
        for(i=0; i<Students.currentNumStu; i++)
        {
            printf("%15lu",Students.List[i].no);
            printf("%15s",Students.List[i].name);
            for(j=0; j<NUMSCORE; j++)
                printf("%10.1f", Students.List[i].score[j]);
            printf("\n");
        }
    }
}
void AddFile()
{
    /*从文件添加学生信息*/
    if(Students.currentNumStu>=NUMSTU)
    {
        printf("成绩单已满!不可打开文件添加信息!\n");
    }
    else
    {
        printf("请输入文件名:");
        scanf("%s",namewj);
        if((fp=fopen(namewj,"r"))==NULL)
        {
            printf("文件打开失败!\n");
            return;
        }
        i=Students.currentNumStu;
        while(!feof(fp))
        {
            if(Students.currentNumStu==5)
            {
                printf("成绩单已添加满!不可再加文件剩余学生信息!!\n");
                break;
            }
            fscanf(fp,"%lu",&Students.List[i].no);
            fflush(stdin);
            fscanf(fp,"%s",&Students.List[i].name);
            for(j=0; j<NUMSCORE-1; j++)
            {
                fscanf(fp,"%f",&Students.List[i].score[j]);
            }
            /*计算平均成绩*/
            sum=0;
            for(j=0; j<NUMSCORE-1; j++)
                sum = sum+Students.List[i].score[j];
            Students.List[i].score[3] =sum/3;
            Students.currentNumStu++;
        }
        if(!feof(fp))
            printf("文件信息添加完成!\n");
        fclose(fp);
    }

}

void ShowFile()
{
    /*显示学生信息到文件*/
    printf("请输入文件名:");
    scanf("%s",namewj);
    if((zp=fopen(namewj,"w"))==NULL)
    {
        printf("文件打开失败!\n");
        return;
    }
    fprintf(zp,"count=%d\n",Students.currentNumStu);
    fprintf(zp,"%15s%15s%10s%10s%10s%10s\n","number","name","math","chinese","english","average");
    for(i=0; i<Students.currentNumStu; i++)
    {
        fprintf(zp,"%15lu",Students.List[i].no);
        fprintf(zp,"%15s",Students.List[i].name);
        for(j=0; j<NUMSCORE; j++)
            fprintf(zp,"%10.1f",  Students.List[i].score[j]);
        fprintf(zp,"\n");
    }
    printf("文件输入完成!\n");
    fclose(fp);
}

void Choose()
{
    /*功能选择*/
    switch(menuItem)
    {
    case ‘1‘:
        Creat();
        break;
    case ‘2‘:
        Add();
        break;
    case ‘3‘:
        Edit();
        break;
    case ‘4‘:
        Delete();
        break;
    case ‘5‘:
        Count();
        break;
    case ‘6‘:
        SortMenu();
        break;
    case ‘7‘:
        Show();
        break;
    case ‘8‘:
        AddFile();
        break;
    case ‘9‘:
        ShowFile();
        break;
    case ‘0‘:
        printf("您选择了“0——退出”\n");
        break;
    default:
        printf("非法输入\n");
    }
}

以上是关于对大一写的代码函数结构化(没有调整代码书写规范)的主要内容,如果未能解决你的问题,请参考以下文章

Matlab代码书写规范

Matlab代码书写规范

Matlab代码书写规范

Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!

CSS代码书写规范

CSS代码书写规范