回覆列表
  • 1 # luxer吶

    你需要將資料儲存到檔案當中呀,如果你只是將資料儲存到陣列中,那麼每一次執行都會重置的

    這是我之前課設寫的程式碼 寫的不好 你可以看一下

    #include<stdio.h>

    #define N 100

    typedef struct {

    char Callid[N];//電話號

    char Name[N];//姓名

    char Gender[N];//性別

    char Address[N];//家庭住址

    int Id;//學號

    int Rank;//考試名次

    int TotalRank;//綜合成績名次

    double Math;//數學成績

    double English;//外語成績

    double Chinese;//語文成績

    double Average;//平均成績

    double TotalScore;//綜合測評成績

    double PeerGrading;//同學互評

    double FlightTracker;//老師評分

    double CharacterGrades;//品德成績

    }datatype;

    void Printf(datatype stu[N], int j) {

    int c;

    printf("瀏覽資料前請先插入資料");

    printf("1.輸出學生資訊");

    printf("2.輸出學生考試成績");

    printf("3.輸出學生綜測成績");

    printf("4.輸出學生全部資訊");

    scanf("%d",&c);

    switch (c) {

    case 1: for (int i = 0; i < j; i++){

    printf("姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);

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

    }

    break;

    case 2:for (int i = 0; i < j; i++) {

    printf("姓名:%s 學號:%d\n", stu[i].Name,stu[i].Id);

    printf("數學成績:%f 語文成績:%f 英語成績:%f 平均成績:%f 排名%d\n", stu[i].Math, stu[i].Chinese, stu[i].English, stu[i].Average, stu[i].Rank);

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

    }

    break;

    case 3:for (int i = 0; i < j; i++) {

    printf("姓名:%s 學號:%d\n", stu[i].Name,stu[i].Id);

    printf("綜合測評成績:%f 同學互評:%f 老師評分:%f 品德成績:%f 綜合成績名次:%d\n", stu[i].TotalScore, stu[i].PeerGrading, stu[i].FlightTracker, stu[i].CharacterGrades, stu[i].TotalRank);

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

    }

    case 4:for (int i = 0; i < j; i++) {

    printf("姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);

    printf("數學成績:%f 語文成績:%f 英語成績:%f 平均成績:%f 排名%d\n", stu[i].Math, stu[i].Chinese, stu[i].English, stu[i].Average, stu[i].Rank);

    printf("綜合測評成績:%f 同學互評:%f 老師評分:%f 品德成績:%f 綜合成績名次:%d\n", stu[i].TotalScore, stu[i].PeerGrading, stu[i].FlightTracker, stu[i].CharacterGrades, stu[i].TotalRank);

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

    }

    }

    }

    void find(datatype stu[N], int j,int i) {

    int c=0;

    int b;

    for (int k = 0; k < j; k++) {

    if (stu[k].Id == i) {

    printf("姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[k].Name, stu[k].Gender, stu[k].Callid, stu[k].Address, stu[k].Id);

    printf("數學成績:%f 語文成績:%f 英語成績:%f 平均成績:%f 排名%d\n", stu[k].Math, stu[k].Chinese, stu[k].English, stu[k].Average, stu[k].Rank);

    printf("綜合測評成績:%f 同學互評:%f 老師評分:%f 品德成績:%f 綜合成績名次:%d\n", stu[k].TotalScore, stu[k].PeerGrading, stu[k].FlightTracker, stu[k].CharacterGrades, stu[i].TotalRank);

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

    j++;

    _getch();

    }

    }

    if (c =0) {

    printf("沒有查詢到此同學");

    }

    }

    void Save(datatype stu[],int j) {

    FILE* File;

    File = fopen(".\\stu.txt", "wb");

    rewind(File);

    for (int i = 0; i <=j; i++) {

    fprintf(File, "姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);

    fprintf(File, "****************************************************\n");

    }

    fclose(File);

    printf("\n資料儲存成功。\n");

    }

    void Menu(){

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 1.輸入學生資訊 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 2.插入同學資訊 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 4.瀏覽學生資訊 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 5.輸入考試成績 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 6.輸入綜測成績 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 7.更改學生成績 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 8.查詢同學資訊 ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** 9.退出** ** ** ** ** ** ** ** ** ** ** \n");

    printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");

    }

    void Sort(datatype stu[N], int j) {

    int k;

    datatype temp;

    for (int i = 0; i < j + 1; i++) {

    k = i;

    for (int o = i + 1; o <= j; o++) {

    if (stu[k].Id > stu[o].Id) {

    k = o;

    }

    }

    if (stu[i].Id > stu[k].Id) {

    temp = stu[i];

    stu[i] = stu[k];

    stu[k] = temp;

    }

    }

    }

    int SaveStudent(datatype stu[N]) {//錄入學生基本資訊

    datatype temp;

    int k;

    char c;

    int j;

    for ( j = 0; j <N; j++) {

    printf("請輸入第 %d 號學生姓名:", j+1);

    scanf_s("%s", stu[j].Name, sizeof(stu[j].Name));

    printf("請輸入第 %d 號學生學號:", j+1);

    scanf_s("%d", &stu[j].Id,sizeof(stu[j].Id));

    printf("請輸入第 %d 號學生性別:", j+1);

    scanf_s("%s", stu[j].Gender, sizeof(stu[j].Gender));

    printf("請輸入第 %d 號學生家庭住址:", j+1);

    scanf_s("%s", stu[j].Address, sizeof(stu[j].Address));

    printf("請輸入第 %d 號學生聯絡號碼:", j+1);

    scanf_s("%s",stu[j].Callid, sizeof(stu[j].Callid));

    printf("如果輸入完成請按下‘*’以結束輸入程式,若繼續請按其他任意鍵\n");

    c = _getch();

    if (c == "*") {

    break;

    }

    }

    Sort(stu,j);

    Save(stu,j);

    return j + 1;

    }

    int Input(datatype stu[N],int j) {

    printf("請輸入學生姓名:" );

    scanf_s("%s", stu[j].Name, sizeof(stu[j].Name));

    printf("請輸入學生學號:" );

    scanf_s("%d", &stu[j].Id, sizeof(stu[j].Id));

    printf("請輸入學生性別:");

    scanf_s("%s", stu[j].Gender, sizeof(stu[j].Gender));

    printf("請輸入學生家庭住址:");

    scanf_s("%s", stu[j].Address, sizeof(stu[j].Address));

    printf("請輸入學生聯絡號碼:");

    scanf_s("%s", stu[j].Callid, sizeof(stu[j].Callid));

    Sort(stu, j);

    Save(stu, j);

    return j + 1;

    }

    int Delete(datatype stu[N], int j) {

    int i;

    char c;

    scanf("%d", &i);

    for (int k = 0; k < j; k++) {

    if (stu[k].Id == i) {

    printf("姓名:%s 學號:%d 聯絡電話:%s 性別:%s 家庭住址:%s", stu[k].Name, stu[k].Id, stu[k].Callid, stu[k].Gender, stu[k].Address);

    c = _getch();

    if (c == "y") {

    for (int i = k; k < j; k++) {

    stu[k] = stu[k + 1];

    }

    return j - 1;

    }

    }

    }

    printf("沒有查詢到此同學");

    return j;

    }

    void Sorce(datatype stu[N], int j){

    for (int i = 0; i < j; i++) {

    printf("請輸入%s學號%d的成績\n", stu[i].Name, stu[i].Id);

    printf("請輸入語文成績:");

    scanf("%lf", &stu[i].Chinese);

    printf("請輸入數學成績:");

    scanf("%lf", &stu[i].Math);

    printf("請輸入外語成績:");

    scanf("%lf", &stu[i].English);

    stu[i].Average = (stu[i].Chinese + stu[i].Math + stu[i].English) / 3;

    printf("%f", stu[i].Average);

    }

    int k;

    datatype temp;

    for (int i = 0; i < j; i++) {

    k = i;

    for (int o = i + 1; o <= j-1; o++) {

    if (stu[k].Average > stu[o].Average) {

    k = o;

    }

    }

    if (stu[i].Average > stu[k].Average) {

    temp = stu[i];

    stu[i] = stu[k];

    stu[k] = temp;

    }

    }

    for (int i = 0; i < j; i++) {

    stu[i].Rank = j-i;

    }

    Sort(stu, j-1);

    FILE* File;

    File = fopen(".\\stu1.txt", "wb");

    rewind(File);

    for (int i = 0; i <j; i++) {

    fprintf(File, "姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);

    fprintf(File, "語文成績:%f 數學成績:%f 外語成績:%f 平均成績:%f 考試名次:%d\n", stu[i].Chinese, stu[i].Math, stu[i].English, stu[i].Average, stu[i].Rank);

    fprintf(File, "****************************************************\n");

    }

    fclose(File);

    printf("\n資料儲存成功。\n");

    }

    void TotalSorce(datatype stu[N], int j) {

    for (int i = 0; i < j; i++) {

    printf("請輸入%s學號%d的綜測成績\n", stu[i].Name, stu[i].Id);

    printf("請輸入同學互評分:");

    scanf("%lf", &stu[i].PeerGrading);

    printf("請輸入品德成績:");

    scanf("%lf", &stu[i].CharacterGrades);

    printf("請輸入老師評分:");

    scanf("%lf", &stu[i].FlightTracker);

    stu[i].TotalScore = stu[i].Average * 0.6 + stu[i].PeerGrading * 0.1 + stu[i].CharacterGrades * 0.1 + stu[i].FlightTracker * 0.2;

    }

    int k;

    datatype temp;

    for (int i = 0; i < j ; i++) {

    k = i;

    for (int o = i + 1; o <= j-1; o++) {

    if (stu[k].TotalScore > stu[o].TotalScore) {

    k = o;

    }

    }

    if (stu[i].TotalScore > stu[k].TotalScore) {

    temp = stu[i];

    stu[i] = stu[k];

    stu[k] = temp;

    }

    }

    for (int i = 0; i < j; i++) {

    stu[i].TotalRank = j-i;

    }

    Sort(stu, j-1);

    FILE* File;

    File = fopen(".\\stu2.txt", "wb");

    rewind(File);

    for (int i = 0; i < j; i++) {

    fprintf(File, "姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);

    fprintf(File, "語文成績:%f 數學成績:%f 外語成績:%f 平均成績:%f 考試名次:%d\n", stu[i].Chinese, stu[i].Math, stu[i].English, stu[i].Average, stu[i].Rank);

    fprintf(File, "同學互評分:%f 品德成績:%f 老師評分:%f 綜測總分:%f 綜測排名:%d\n", stu[i].PeerGrading, stu[i].CharacterGrades, stu[i].FlightTracker, stu[i].TotalScore, stu[i].TotalRank);

    fprintf(File, "****************************************************\n");

    }

    fclose(File);

    printf("\n資料儲存成功。\n");

    }

    void ESorce(datatype stu[N], int j) {

    int i;

    int a;

    printf("請輸入要修改同學的學號");

    scanf("%d", &a);

    find(stu, j,a);

    for (i = 0; i < j; i++) {

    if (stu[i].Id == a) {

    printf("請輸入%s學號%d的成績\n", stu[i].Name, stu[i].Id);

    printf("請輸入語文成績:");

    scanf("%lf", &stu[i].Chinese);

    printf("請輸入數學成績:");

    scanf("%lf", &stu[i].Math);

    printf("請輸入外語成績:");

    scanf("%lf", &stu[i].English);

    stu[i].Average = (stu[i].Chinese + stu[i].Math + stu[i].English) / 3;

    rintf("請輸入%s學號%d的綜測成績\n", stu[i].Name, stu[i].Id);

    printf("請輸入同學互評分:");

    scanf("%lf", &stu[i].PeerGrading);

    printf("請輸入品德成績:");

    scanf("%lf", &stu[i].CharacterGrades);

    printf("請輸入老師評分:");

    scanf("%lf", &stu[i].FlightTracker);

    stu[i].TotalScore = stu[i].Average * 0.6 + stu[i].PeerGrading * 0.1 + stu[i].CharacterGrades * 0.1 + stu[i].FlightTracker * 0.2;

    }

    }

    Sort(stu, j);

    Save(stu, j);

    }

    void Find1(datatype stu[N], int j) {

    char f[N];

    int d;

    int a;

    int k = 0;

    printf("1.按學號查詢");

    printf("2.按姓名查詢");

    printf("3.按聯絡方式查詢");

    scanf("%d",&d);

    switch (d) {

    case 1:

    {

    printf("請輸入學號:");

    scanf("%d", &a);

    find(stu, j, a);

    break;

    }

    case 2: {

    printf("請輸入姓名:");

    scanf("%s", f);

    for (int i = 0; i < j; i++) {

    if (f == stu[i].Name) {

    a = stu[i].Id;

    find(stu, j, a);

    k++;

    }

    }

    if (k = 0) {

    printf("沒有找到此學生");

    }

    break;

    }

    case 3:

    printf("請輸入聯絡方式:");

    scanf("%s", f);

    for (int i = 0; i < j; i++) {

    if (f == stu[i].Callid) {

    a = stu[i].Id;

    find(stu, j, a);

    k++;

    }

    }

    if (k = 0) {

    printf("沒有找到此同學");

    }

    }

    }

    int main() {

    int count;

    int c;

    datatype stu[N];

    while (1) {

    Menu();

    scanf("%d", &c);

    switch (c) {

    case 1:

    count = SaveStudent(stu);

    system("cls");

    break;

    case 2:

    count = Input(stu, count);

    system("cls");

    break;

    case 3:

    count = Delete(stu, count);

    system("cls");

    break;

    case 4:

    Printf(stu, count);

    system("cls");

    break;

    case 5:

    Sorce(stu, count);

    system("cls");

    break;

    case 6:

    TotalSorce(stu, count);

    system("cls");

    break;

    case 7:

    ESorce(stu, count);

    system("cls");

    break;

    case 8:

    Find1(stu, count);

    system("cls");

    break;

    case 9:

    return 0;

    }

    }

    }

  • 2 # 教女朋友學程式設計

    建議把資料儲存到檔案中,然後下次啟動的時候,從檔案中讀取到記憶體中,就可以了!

    專業說法叫 “資料持久化”!

    想學習C語言程式設計,可以多看看我的主頁!

  • 中秋節和大豐收的關聯?
  • 那些喜歡水瓶女的,都是因為水瓶的什麼特質而被吸引?