zoukankan      html  css  js  c++  java
  • 简单的学生成绩管理系统(待优化)

    #include<stdio.h>
    #include<string.h>
    struct Stu
    {
    char Name[12];
    int ID;
    int Math;
    int Chinese;
    int English;
    };
    struct Stu Student[100];
    void Menu()
    {
    puts("1.Browse");
    puts("2.Add");
    puts("3.Delete");
    puts("4.Modify");
    puts("5.Find");
    puts("0.Exit");
    }
    void Save()
    {
    FILE* pfw = fopen("data1.txt", "w");
    if (pfw == NULL)
    {
    printf("Save failed!");
    return;
    }
    int i = 0;
    while (Student[i].ID != 0)
    {
    if (Student[i].ID != -1)
    {
    fwrite(&Student[i], 1, sizeof(struct Stu), pfw);
    }
    i++;
    }
    fclose(pfw);
    }
    void Load()
    {
    FILE* pfr = fopen("data1.txt", "r");
    if (pfr == NULL)
    {
    printf("Load failed!");
    return;
    }
    int i = 0;
    int flag = 0;
    do
    {
    flag=fread(&Student[i], 1, sizeof(struct Stu),pfr);
    i++;
    } while (flag== sizeof(struct Stu));
    fclose(pfr);
    }
    int Judge(int nIndex,int i,int nMaxindex)
    {
    if (nIndex == 0) return Student[i].ID > Student[nMaxindex].ID;
    if (nIndex == 1) return Student[i].Math < Student[nMaxindex].Math;
    if (nIndex == 2) return strcmp(Student[i].Name, Student[nMaxindex].Name)>0;
    }
    void Sort(int nIndex)
    {
    int n = 0, nMaxindex = 0;
    struct Stu Tmp;
    while (Student[n].ID != 0)
    n++;
    for (int j = n-1;j>0 ; j--)
    {
    nMaxindex = 0;
    for (int i = 1; i <= j; i++)
    {
    if (Judge(nIndex,i, nMaxindex))
    {
    nMaxindex = i;
    }
    }
    if (nMaxindex != j)
    {
    Tmp = Student[j];
    Student[j] = Student[nMaxindex];
    Student[nMaxindex] = Tmp;
    }
    }
    }
    void Print()
    {
    int i = 0;
    puts("Name IDnumber Math Chinese English ");
    while (Student[i].ID != 0)
    {
    if (Student[i].ID != -1)
    {
    printf("%s %-8d %d %d %d ", Student[i].Name, Student[i].ID, Student[i].Math, Student[i].Chinese, Student[i].English);
    }
    i++;
    }
    }
    int Browse()
    {
    puts("1.Sort by ID");
    puts("2.Sort by Name");
    puts("3.Sort by Math");
    puts("4.Return");
    char s = getchar();
    while (getchar()!= ' ')continue;
    switch (s)
    {
    case '1':Sort(0); Print(); break;
    case '2':Sort(2); Print(); break;
    case '3':Sort(1); Print(); break;
    case '4': break;
    default:puts("please obey!"); return 1;
    }
    return 0;
    }
    int Add()
    {
    int i = 0;
    puts("Put ID");
    int ID;
    scanf("%d", &ID);
    while (getchar() != ' ')continue;
    while (Student[i].ID != 0 && Student[i].ID != -1)
    {
    if (Student[i].ID == ID)
    {
    return 1;
    }
    i++;
    }
    Student[i].ID = ID;
    puts("Name");
    scanf("%s", &Student[i].Name);
    while (getchar() != ' ')continue;
    puts("Math,Chinese,English");
    scanf("%d,%d,%d", &Student[i].Math, &Student[i].Chinese, &Student[i].English);
    while (getchar() != ' ')continue;
    Save();
    return 0;
    }
    int Delete()
    {
    int i = 0;
    puts("Put ID");
    int ID;
    scanf("%d", &ID);
    while (getchar() != ' ')continue;
    while (Student[i].ID != 0)
    {
    if (Student[i].ID == ID)
    {
    Student[i].ID = -1;
    break;
    }
    i++;
    }
    if (Student[i].ID == 0)
    return 1;
    Save();
    return 0;
    }
    int Modify()
    {
    int i = 0;
    puts("Put ID");
    int ID;
    scanf("%d", &ID);
    while (getchar() != ' ')continue;
    while (Student[i].ID != 0)
    {
    if (Student[i].ID == ID)
    {
    break;
    }
    i++;
    }
    if (Student[i].ID == 0)
    return 1;
    puts("Math,Chinese,English");
    scanf("%d,%d,%d", &Student[i].Math, &Student[i].Chinese, &Student[i].English);
    while (getchar() != ' ')continue;
    Save();
    return 0;
    }
    int Find()
    {
    int i = 0;
    puts("Put ID");
    int ID;
    scanf("%d", &ID);
    while (getchar() != ' ')continue;
    while (Student[i].ID != 0)
    {
    if (Student[i].ID == ID)
    {
    printf("%s,%d,%d,%d ", Student[i].Name, Student[i].Math, Student[i].Chinese, Student[i].English);
    break;
    }
    i++;
    }
    if (Student[i].ID == 0)
    return 1;
    return 0;
    }
    int main(void)
    {
    Load();
    while (1)
    {
    Menu();
    char s = getchar();
    while (getchar() != ' ')continue;
    switch (s)
    {
    case '1': {while(Browse()==1); break; }
    case '2': {if (Add() == 1)puts("ID is duplicated"); else puts("Add success!"); break; }
    case '3': {if (Delete() == 1)puts("ID doesn't exist"); else puts("Delete success!"); break; }
    case '4': {if (Modify() == 1)puts("ID doesn't exist"); else puts("Modify success!"); break; }
    case '5': {if (Find() == 1)puts("ID doesn't exist"); else puts("Find success!"); break; }
    case '0': {return 0; }
    default: {puts("Please obey!"); break; }
    }
    }
    return 0;
    }

    简介:100个表示学生的结构体,有添加,浏览所有学生,根据学号查找、修改、删除的功能。添加时具有自动学号查重的功能。浏览时有多种排序功能

    写这段代码收获;

    1.if配合break跳循环很好用.

    2.scanf里面要是用输入%s格式,如

    scanf("%s", &Student[i].Name);

    就不要用scanf接受多个格式的变量了,这个scanf就专门用来接%s,因为如果不这样做,输入的时候后面你想要输入的不属于%s格式的内容无法与前面你想输入进去属于%s的内容分开,造成你不想要的结果.

    3. 用于对齐时,如果一列上的数据,有的大于等于8位,有的小于8位就会造成对不齐的效果,这个时候机智的将小于8位的数利用类似-%8d这种格式强制将其转化成8位的就可以了.

    4.getchar()和scanf命令之后可以跟

    while (getchar() != '
    ')continue;

    来清空缓存区,还可以把上面的代码当暂停用

    5.c语言文件操作在实际使用中,最好写一个Save()函数用来保存,每次修改和添加都调用一次Save()函数,再写一个Load()函数,这个函数只在main函数开头调用一次就可以,用来把文件里的数据导出到程序中进行处理或显示.

    6.多个函数的代码只有局部不相同,此时设置一个判断函数来分别选择这个局部代码,可以使代码更简洁。

    如这里面的Judge函数

  • 相关阅读:
    包装类
    项目基础架构搭建
    开发环境的搭建和Shell编程
    Linux系统概述和编程基础
    java.lang.ExceptionInInitializerError
    mybatis中文文档
    如何造轮子
    Application Server was not connected before run configuration stop, reason: Unable to ping server at localhost:1099
    JDK 1.7与JDK 1.8版本的完美切换
    JDBC连接步骤
  • 原文地址:https://www.cnblogs.com/ma77045728/p/6953951.html
Copyright © 2011-2022 走看看