C语言-学生成绩管理系统

2024-06-18 1131阅读

void modify(); // 主修改函数(包括通过学号修改与删除函数)

void modifyById(); // 通过Id修改学生信息

void deleteById(); // 通过Id删除学生信息

void sort(); // 主排序函数

void sortByAvg(); // 平均分排序函数

void sortByScore1(); // 成绩1排序函数

void sortByScore2(); // 成绩2排序函数

void sortByScore3(); // 成绩3排序函数

void save(); // 文件保存函数

void load(); // 文件加载函数

void shutdown(); // 退出函数

// 学生信息结构体

struct student{

int id; //学号

char name[20]; //姓名

char sex[4]; //性别

double score1; //成绩1

double score2; //成绩2

double score3; //成绩3

double ave; //平均分

};

// 定义队列的结构体

typedef struct Squeue {

struct student data[MAXSIZE];

int front;

int rear;

}Squeue;

// 初始化队列

void InitQueue(Squeue* qu)

{

qu->front = qu->rear = 0;

for (int i = 0; i

qu->data[i].id = 0;

strcpy(qu->data[i].name, “NULL”);

strcpy(qu->data[i].sex, “NULL”); // 解决表达式必须是可修改的左值(字符串不能直接赋值)

qu->data[i].score1 = 0.0;

qu->data[i].score2 = 0.0;

qu->data[i].score3 = 0.0;

qu->data[i].ave = 0.0;

}

}

// 判断队列是否为空

int isQueueEmpty(Squeue* qu)

{

if (qu->front == qu->rear)

{

return 1;

}

else

{

return 0;

}

}

// 元素入队操作

int EnQueue(Squeue* qu, struct student s)

{

//若队满则无法入队

if ((qu->rear + 1) % MAXSIZE == qu->front)

{

return 0;

}

qu->data[qu->rear].id = s.id;

strcpy(qu->data[qu->rear].name, s.name);

strcpy(qu->data[qu->rear].sex, s.sex);

qu->data[qu->rear].score1 = s.score1;

qu->data[qu->rear].score2 = s.score2;

qu->data[qu->rear].score3 = s.score3;

s.ave = (s.score1 + s.score2 + s.score3) / 3;

qu->data[qu->rear].ave = s.ave;

qu->rear = (qu->rear + 1) % MAXSIZE;

return 1;

}

// 元素出队操作

int Dequeue(Squeue* qu)

{

//若队空则无法出队

if (qu->front == qu->rear)

{

return 0;

}

qu->front = (qu->front + 1) % MAXSIZE;

return 1;

}

// 系统主函数入口

int main(){

int flag = 1;
int choice;
Squeue \*Q;
Q = (Squeue\*)calloc(20,sizeof(Squeue));
InitQueue(Q);
load(Q);    //完成数据的预读取
while (flag) {
    display();
    printf("\t请在0-9之间做出选择:");
    fflush(stdin);          //清除输入设备的缓冲
    scanf("%d", &choice);
    switch (choice)
    {
        case 1:
             system("cls");
             insert(Q);
             break;
        case 2:
             system("cls");
             show(Q);
             break;
        case 3:
             system("cls");
             sort(Q);
             break;
        case 4:
             system("cls");
             modify(Q);
             break;
        case 5:
             system("cls");
             find(Q);
             break;     
        case 6:
            save(Q);
            shutdown();
        default:
             system("cls");
             continue;              
    }
}
return 0;

}

// 主页面展示函数

void display() {

printf(“\t************学 生 管 理 系 统**********\n”);

printf(“\t1.录入学生信息\n”);

printf(“\t2.显示学生信息\n”);

printf(“\t3.学生成绩排序\n”);

printf(“\t4.编辑学生信息\n”);

printf(“\t5.查询学生成绩\n”);

printf(“\t6.退出\n”);

printf(“\t************学 生 管 理 系 统**********\n”);

}

// 插入学生信息函数

void insert(Squeue *Q) {

int i = 0;

char ch;

do

{

struct student s;

printf(“\n”);

printf(“\t正在录入第%d个学生的信息”, i + 1);

     printf("\n");
     printf("\t输入学生学号:");
     scanf("%d", &s.id);
     fflush(stdin);
     printf("\n");
     printf("\t输入学生姓名:");
     fflush(stdin);
     gets(s.name);
     printf("\n");
     printf("\t输入学生性别:");
     fflush(stdin);
     gets(s.sex);
     printf("\n");
     printf("\t输入学生成绩1:");
     scanf("%lf", &s.score1);
     fflush(stdin);
     printf("\n");
     printf("\t输入学生成绩2:");
     fflush(stdin);
     scanf("%lf", &s.score2);
     printf("\n");
     printf("\t输入学生成绩3:");
     fflush(stdin);
     scanf("%lf", &s.score3);
     printf("\n");
     EnQueue(Q,s);
     i++;
     printf("\t是否继续输入?(Y/N)");
     fflush(stdin);
     ch = getch();
     system("cls");

}while(ch != ‘n’ && ch != ‘N’);

system(“cls”);

}

// 学生信息显示示函数

void show(Squeue *Q) {

int i;

char choice;

do{

printf(“\n”);

printf(“\t班级学生信息列表\n”);

  	printf("\t学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
  	for(i = Q->front; i rear; i++){
        if(Q->data[i].id == 0) {  // 解决删除时候最后元素异常显示问题
            continue;
        }  
        printf("\t%d\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", Q->data[i].id, Q->data[i].name, Q->data[i].sex, Q->data[i].score1, Q->data[i].score2, Q->data[i].score3, Q->data[i].ave);
    }
  	printf("\t\t\t按任意键返回主菜单\a");
  	fflush(stdin);
  	choice = getch();
}while(!choice);
system("cls");

}

// 文件保存函数

void save(Squeue *Q) {

FILE *fp;

int i;

if((fp = fopen("D://Student.txt", "w")) == NULL)
{
    printf("\n保存失败!");
    shutdown();
}
for(i = Q->front; i rear; i++)
 {
    if(Q->data[i].id == 0) {  // 解决删除时候最后元素异常显示问题
        continue;
    }  
    fprintf(fp, "%d %s %s %lf %lf %lf %lf\t", Q->data[i].id, Q->data[i].name, Q->data[i].sex, Q->data[i].score1, Q->data[i].score2, Q->data[i].score3, Q->data[i].ave);
    //fwrite(&Q->data[i], sizeof(struct student), 1, fp);
 }
 fclose(fp);
 printf("学生信息已自动保存!\n");

}

// 文件加载函数

void load(Squeue *Q) {

FILE *fp;

int i;

if((fp = fopen("D://Student.txt", "r")) == NULL)        // 需要提前准备好文件
{
   printf("找不到文件!\n");
   shutdown();
}
fseek(fp, 0, SEEK\_SET);
for(i = Q->front; i data[i].id, Q->data[i].name, Q->data[i].sex, &Q->data[i].score1, &Q->data[i].score2, &Q->data[i].score3, &Q->data[i].ave);
    //fread(&Q->data[i], sizeof(struct student), 1, fp);
    Q->rear++;          // 解决文件读取异常情况,指针未后移
}
fclose(fp);

}

// 主查询函数

void find(Squeue *Q){

int choice;

int flag = 1; // 设置标志位,结束循环

do{

printf(“\n”);

printf(“\t学生查询系统\n”);

printf(“\t1.按照学生学号查询\n”);

printf(“\t2.按照学生姓名查询\n”);

printf(“\t3.返回主菜单\n”);

printf(“\t请输入要选择的功能:”);

fflush(stdin);

scanf(“%d”, &choice);

switch(choice)

{

case 1:

system(“cls”);

findById(Q);

break;

case 2:

system(“cls”);

findByName(Q);

break;

case 3:

system(“cls”);

flag = 0;

break;

default:

system(“cls”);

find(Q);

break;

}

}while(flag);

system(“cls”);

}

// 通过学号查询学生

void findById(Squeue *Q){

int i;

int choice;

char as;

do{

printf(“\n”);

printf(“\t输入要查询的学生学号:\a”);

fflush(stdin);

scanf(“%d”, &choice);

    for(i = Q->front; i rear; i++) {
        if(choice == Q->data[i].id)
        {
            printf("\t学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
            printf("\t%d\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", Q->data[i].id, Q->data[i].name, Q->data[i].sex, Q->data[i].score1, Q->data[i].score2, Q->data[i].score3, Q->data[i].ave);
        }
    }
    printf("\t按任意键返回主菜单");
    fflush(stdin);
    as = getch();
 }while(!as);
system("cls");

}

// 通过姓名查询学生

void findByName(Squeue *Q){

int i;

char str[20],as;

do{

printf(“\n”);

printf(“\t输入要查询的学生姓名:”);

fflush(stdin);

gets(str);

    for(i = Q->front; i rear; i++) {
        if(!strcmp(Q->data[i].name,str))
        {
            printf("\t学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n");
            printf("\t%d\t%s\t%s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", Q->data[i].id, Q->data[i].name, Q->data[i].sex, Q->data[i].score1, Q->data[i].score2, Q->data[i].score3, Q->data[i].ave);
        }
    }
    printf("\t按任意键返回主菜单");
    fflush(stdin);
    as=getch();
 }while(!as);
system("cls");

}

// 主修改函数(包括通过学号修改与删除函数)

void modify(Squeue *Q){

int choice;

int flag = 1; // 设置标志位,结束循环

do{

printf(“\n”);

printf(“\t学生修改系统\n”);

printf(“\t1.按照学号修改学生\n”);

printf(“\t2.按照学号删除学生\n”);

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

C语言-学生成绩管理系统

C语言-学生成绩管理系统

前端面试题汇总

C语言-学生成绩管理系统

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]