亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現學生信息管理系統的文件操作

發布時間:2022-06-20 15:18:27 來源:億速云 閱讀:124 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C語言如何實現學生信息管理系統的文件操作”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C語言如何實現學生信息管理系統的文件操作”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

新增函數——文件操作;

//學生數據文件儲存 
//儲存任意時期的學生數據 
void Store_List(Link head)
{
    //文件操作 
    ofstream ofs;
    ofs.open("Std_Information.txt",ios::out);
    
    if(head==NULL)
    {
        printf("學生為空\n");
        return; 
    }
    else
    {
        Link p=head->next;
        while(p)
        {
            ofs<< "姓名:"<<p->data.studentName<<"    學號:"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            p=p->next;
        }
        
    }
}

1.頭文件和預處理

#include <stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
#include<iostream>
#include<fstream>//文件操作所需頭文件 
using namespace std;
#define NO_LENGTH  20
#define NAME_LENGTH 11

/* 定義學生結構體的數據結構 */
typedef struct Student{
    char studentNo[NO_LENGTH];
    char studentName[NAME_LENGTH];
    int score;
}st;

/* 定義每條記錄或節點的數據結構 */
typedef struct node
{
    struct Student data; //數據域
    struct node *next; //指針域
}Node,*Link;  //Node為node類型的別名,Link為node類型的指針別名

2.定義學生結構體的數據結構

typedef struct Student{
    char studentNo[NO_LENGTH];
    char studentName[NAME_LENGTH];
    int score;
}st;

3.定義每條記錄或節點的數據結構

/* 定義每條記錄或節點的數據結構 */
typedef struct node
{
    struct Student data; //數據域
    struct node *next; //指針域
}Node,*Link;  //Node為node類型的別名,Link為node類型的指針別名

4.函數接口代碼.

1.定義提示菜單

//定義提示菜單
void myMenu(){

    printf("*****************************菜單*****************************\n"); 
    printf("***********************1 增加學生記錄*************************\n"); 
    printf("***********************2 刪除學生記錄*************************\n"); 
    printf("***********************3 查找學生記錄*************************\n"); 
    printf("***********************4 修改學生記錄*************************\n"); 
    printf("***********************5 統計學生人數 ************************\n"); 
    printf("***********************6 顯示學生記錄*************************\n"); 
    printf("***********************7 信息文件打印*************************\n");
    printf("***********************8 退出系統 ****************************\n"); 
    
}

2.增加學生記錄

void inputStudent(Link l){
     printf("請輸入學生學號:");
     scanf("%s",l->data.studentNo);
     printf("請輸入學生的姓名:");
     scanf("%s",l->data.studentName);
    printf("請輸入學生的成績:");
     scanf("%s",&(l->data.score));
     //每個新創建的節點的next域都初始化為NULL
     l->next = NULL;
     system("cls");
}

3.輸入學號接口&middot;

void inputStudentNo(char s[],char no[]){
    printf("請輸入要%s的學生學號:",s);
    scanf("%s",no);
}

4.遍歷表中學生

//遍歷表中學生 
void displayNode(Link head){
    if(head==NULL)
    {
        printf("學生為空\n");
        return; 
    }
    else
    {
        Link p=head->next;
        while(p)
        {
            cout<<"姓名:"<<p->data.studentName<<"    學號"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            p=p->next;
        }
        
    }
   // 填寫代碼,根據傳入的鏈表head頭指針,掃描鏈表顯示所有節點的信息
   system("pause");
   system("cls");
}

5.增加學生記錄

/* 增加學生記錄 */
bool addNode(Link head){
     Link p,q;   //p,q兩個節點一前一后
     Link node;  //node指針指向新創建的節點
     node=(Link)malloc(sizeof(Node));
     inputStudent(node);

     q = head;
     p = head->next;  //q指向head后面的第一個有效節點
     if(head->next==NULL)
         //鏈表為空時
        head->next = node;
     else {
         //循環訪問鏈表中的所有節點
        while(p != NULL){
            if (node->data.studentNo < p->data.studentNo){
                //如果node節點的學號比p節點的學號小,則插在p的前面,完成插入后,提前退出子程序
                q->next = node;
                node->next = p;
                return true;
            }
            else{
                //如果node節點的學號比p節點的學號大,繼續向后移動指針(依然保持pq一前一后)
                q = p;
                p = p->next;

            }
        }
        //如果沒能提前退出循環,則說明之前沒有插入,那么當前node節點的學號是最大值,此時插在鏈表的最后面
        q->next = node;

    }
     return true;
     system("pause");
   system("cls");
}

6.刪除學生信息

//刪除學生信息
bool deleteNode(Link head){
    // 按照給定的學號刪除學生記錄,如果刪除成功返回true,如果沒找到學號返回false

    //輸入要處理的學號
        char no[NO_LENGTH];
    inputStudentNo("刪除",no);
        Link p=head->next;
    Link q=head;
    while(p)
    {
        if(strcmp(p->data.studentNo,no)==0)
        {
            cout<<"成功刪除該學生"<<endl; 
            q->next=p->next;
            free(p);
            system("pause");
               system("cls");
            return true;
        }
        else
        {
            q=p;
            p=p->next;
        }
    }
    cout<<"未找到該學生"<<endl; 
        system("pause");
           system("cls");
    return false;
}

7.查找學生信息

//查找學生信息 
bool queryNode(Link head){
    // 按照給定的學號查詢學生記錄,如果查找成功返回true,如果沒找到學號返回false

    //輸入要處理的學號
    char no[NO_LENGTH];
    inputStudentNo("查找",no);
        Link p=head->next;
    while(p)
    {
        if(strcmp(p->data.studentNo,no)==0)
        {
            
               system("cls");
               cout<<"姓名:"<<p->data.studentName<<"    學號:"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            return true;
        }
        else
        {
            p=p->next;
        }
    }
    cout<<"未找到該學生"<<endl; 
   system("cls");

    return false;
}

8.修改學生信息

//修改學生信息 
bool modifyNode(Link head){
    // 按照給定的學號找到學生記錄節點,如果修改成功返回true,如果沒找到學號返回false
    
    //輸入要處理的學號
    char no[NO_LENGTH];
    inputStudentNo("修改",no);
    Link p=head->next;
    while(p)
    {
        if(strcmp(p->data.studentNo,no)==0)
        {
            cout<<"請輸入修改后的姓名"<<endl; 
            cin>>p->data.studentName;
            cout<<"請輸入修改后的學號"<<endl; 
            cin>>p->data.studentNo;
            cout<<"請輸入修改后的成績"<<endl; 
            cin>>p->data.score;
            system("cls");
            return true;
        }
        else
        {
            p=p->next;
        }
    }
    cout<<"未找到該學生,請重新輸入學號"<<endl; 
    system("cls");
    return false;
}

9.統計學生人數

//統計學生人數
int countNode(Link head){
    //統計學生人數,掃描鏈表統計節點個數,返回節點數
    Link p;
    int count = 0;
    p = head->next;
    while(p)
    {
        p=p->next;
        count++;
    }
    //填充代碼
    system("cls");
    return count;
}

10.清空鏈表

//清空鏈表 
void clearLink(Link head){
    Link q,p;
    p=head->next;
    q=head;
    while(p)
    {
        q->next=p->next;
        free(p);
        p=q->next;
    }
        //遍歷鏈表,用free語句刪除鏈表中用malloc建立起的所有的節點
}

11.文件操作

//學生數據文件儲存 
//儲存任意時期的學生數據 
void Store_List(Link head)
{
    //文件操作 
    ofstream ofs;
    ofs.open("Std_Information.txt",ios::out);
    
    if(head==NULL)
    {
        printf("學生為空\n");
        return; 
    }
    else
    {
        Link p=head->next;
        while(p)
        {
            ofs<< "姓名:"<<p->data.studentName<<"    學號:"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            p=p->next;
        }
        
    }
}

5.main函數

int main() {
    int select;
        int count;
    Link head;  // 定義鏈表

    //建立head頭結點,在這個程序中head指向頭結點,頭結點data部分沒有內容,其后續節點才有真正的數據
    head = (Link)malloc(sizeof(Node));
    head->next = NULL;

    while(1)
    {
        myMenu();
        printf("\n請輸入你的選擇(0-7):");  //顯示提示信息
        scanf("%d",&select);
        switch(select)
        {
        case 1:
            //增加學生記錄
            if(addNode(head))
                printf("成功插入一個學生記錄。\n\n");
            break;
        case 2:
            //刪除學生記錄
            if(deleteNode(head))
                printf("成功刪除一個學生記錄。\n\n");
            else
                printf("沒有找到要刪除的學生節點。\n\n");
            break;
        case 3:
            //查詢學生記錄
            if(queryNode(head))
                printf("成功找到學生記錄。\n\n");
            else
                printf("沒有找到要查詢的學生節點。\n\n");
            break;
        case 4:
            //修改學生記錄
            if(modifyNode(head))
                printf("成功修改一個學生記錄。\n\n");
            else
                printf("沒有找到要修改的學生節點。\n\n");
            break;
        case 5:
            //統計學生人數
            count = countNode(head);
            printf("學生人數為:%d\n\n",count);
            break;
        case 6:
            //顯示學生記錄
            displayNode(head);
            break;
        case 7:
            //退出前清除鏈表中的所有結點
            clearLink(head);
            return 0;
        default:
            printf("輸入不正確,應該輸入0-7之間的數。\n\n");
            system("cls"); 
            break;
        }
    }
    return 0;
}

6.學生信息管理系統總源碼(可直接復制運行)

#include <stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
#include<iostream>
#include<fstream>//文件操作所需頭文件 
using namespace std;
#define NO_LENGTH  20
#define NAME_LENGTH 11

/* 定義學生結構體的數據結構 */
typedef struct Student{
    char studentNo[NO_LENGTH];
    char studentName[NAME_LENGTH];
    int score;
}st;

/* 定義每條記錄或節點的數據結構 */
typedef struct node
{
    struct Student data; //數據域
    struct node *next; //指針域
}Node,*Link;  //Node為node類型的別名,Link為node類型的指針別名

//定義提示菜單
void myMenu(){

    printf("*****************************菜單*****************************\n"); 
    printf("***********************1 增加學生記錄*************************\n"); 
    printf("***********************2 刪除學生記錄*************************\n"); 
    printf("***********************3 查找學生記錄*************************\n"); 
    printf("***********************4 修改學生記錄*************************\n"); 
    printf("***********************5 統計學生人數 ************************\n"); 
    printf("***********************6 顯示學生記錄*************************\n"); 
    printf("***********************7 信息文件打印*************************\n");
    printf("***********************8 退出系統 ****************************\n"); 
    
}

void inputStudent(Link l){
     printf("請輸入學生學號:");
     scanf("%s",l->data.studentNo);
     printf("請輸入學生的姓名:");
     scanf("%s",l->data.studentName);
    printf("請輸入學生的成績:");
     scanf("%d",&(l->data.score));
     //每個新創建的節點的next域都初始化為NULL
     l->next = NULL;
     system("cls");
}

void inputStudentNo(char s[],char no[]){
    printf("請輸入要%s的學生學號:",s);
    scanf("%s",no);
}
//遍歷表中學生 
void displayNode(Link head){
    if(head==NULL)
    {
        printf("學生為空\n");
        return; 
    }
    else
    {
        Link p=head->next;
        while(p)
        {
            cout<<"姓名:"<<p->data.studentName<<"    學號"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            //ofs<< "姓名:"<<p->data.studentName<<"    學號"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            p=p->next;
        }
        
    }
   // 填寫代碼,根據傳入的鏈表head頭指針,掃描鏈表顯示所有節點的信息
   system("pause");
   system("cls");
}

/* 增加學生記錄 */
bool addNode(Link head){
     Link p,q;   //p,q兩個節點一前一后
     Link node;  //node指針指向新創建的節點
     node=(Link)malloc(sizeof(Node));
     inputStudent(node);

     q = head;
     p = head->next;  //q指向head后面的第一個有效節點
     if(head->next==NULL)
         //鏈表為空時
        head->next = node;
     else {
         //循環訪問鏈表中的所有節點
        while(p != NULL){
            if (node->data.studentNo < p->data.studentNo){
                //如果node節點的學號比p節點的學號小,則插在p的前面,完成插入后,提前退出子程序
                q->next = node;
                node->next = p;
                return true;
            }
            else{
                //如果node節點的學號比p節點的學號大,繼續向后移動指針(依然保持pq一前一后)
                q = p;
                p = p->next;

            }
        }
        //如果沒能提前退出循環,則說明之前沒有插入,那么當前node節點的學號是最大值,此時插在鏈表的最后面
        q->next = node;

    }
     return true;
     system("pause");
   system("cls");
}

bool deleteNode(Link head){
    // 按照給定的學號刪除學生記錄,如果刪除成功返回true,如果沒找到學號返回false

    //輸入要處理的學號
        char no[NO_LENGTH];
    inputStudentNo("刪除",no);
        Link p=head->next;
    Link q=head;
    while(p)
    {
        if(strcmp(p->data.studentNo,no)==0)
        {
            cout<<"成功刪除該學生"<<endl; 
            q->next=p->next;
            free(p);
            system("pause");
               system("cls");
            return true;
        }
        else
        {
            q=p;
            p=p->next;
        }
    }
    cout<<"未找到該學生"<<endl; 
system("pause");
   system("cls");
    return false;
}

//查找學生信息 
bool queryNode(Link head){
    // 按照給定的學號查詢學生記錄,如果查找成功返回true,如果沒找到學號返回false

    //輸入要處理的學號
    char no[NO_LENGTH];
    inputStudentNo("查找",no);
        Link p=head->next;
    while(p)
    {
        if(strcmp(p->data.studentNo,no)==0)
        {
            
               system("cls");
               cout<<"姓名:"<<p->data.studentName<<"    學號:"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            return true;
        }
        else
        {
            p=p->next;
        }
    }
    cout<<"未找到該學生"<<endl; 
   system("cls");

    return false;
}

//修改學生信息 
bool modifyNode(Link head){
    // 按照給定的學號找到學生記錄節點,如果修改成功返回true,如果沒找到學號返回false
    
    //輸入要處理的學號
    char no[NO_LENGTH];
    inputStudentNo("修改",no);
    Link p=head->next;
    while(p)
    {
        if(strcmp(p->data.studentNo,no)==0)
        {
            cout<<"請輸入修改后的姓名"<<endl; 
            cin>>p->data.studentName;
            cout<<"請輸入修改后的學號"<<endl; 
            cin>>p->data.studentNo;
            cout<<"請輸入修改后的成績"<<endl; 
            cin>>p->data.score;
            system("cls");
            return true;
        }
        else
        {
            p=p->next;
        }
    }
    cout<<"未找到該學生,請重新輸入學號"<<endl; 
    system("cls");
    return false;
}

//統計學生人數
int countNode(Link head){
    //統計學生人數,掃描鏈表統計節點個數,返回節點數
    Link p;
    int count = 0;
    p = head->next;
    while(p)
    {
        p=p->next;
        count++;
    }
    //填充代碼
    system("cls");
    return count;
}

//清空鏈表 
void clearLink(Link head){
    Link q,p;
    p=head->next;
    q=head;
    while(p)
    {
        q->next=p->next;
        free(p);
        p=q->next;
    }
        //遍歷鏈表,用free語句刪除鏈表中用malloc建立起的所有的節點
}

//學生數據文件儲存 
//儲存任意時期的學生數據 
void Store_List(Link head)
{
    //文件操作 
    ofstream ofs;
    ofs.open("Std_Information.txt",ios::out);
    
    if(head==NULL)
    {
        printf("學生為空\n");
        return; 
    }
    else
    {
        Link p=head->next;
        while(p)
        {
            ofs<< "姓名:"<<p->data.studentName<<"    學號:"<<p->data.studentNo<<"  成績:"<<p->data.score<<endl; 
            p=p->next;
        }
        
    }
}
int main() {
    int select;
        int count;
    Link head;  // 定義鏈表
    
    
    //建立head頭結點,在這個程序中head指向頭結點,頭結點data部分沒有內容,其后續節點才有真正的數據
    head = (Link)malloc(sizeof(Node));
    head->next = NULL;

    while(1)
    {
        myMenu();
        printf("\n請輸入你的選擇(0-8):");  //顯示提示信息
        scanf("%d",&select);
        switch(select)
        {
        case 1:
            //增加學生記錄
            if(addNode(head))
                printf("成功插入一個學生記錄。\n\n");
            break;
        case 2:
            //刪除學生記錄
            if(deleteNode(head))
                printf("成功刪除一個學生記錄。\n\n");
            else
                printf("沒有找到要刪除的學生節點。\n\n");
            break;
        case 3:
            //查詢學生記錄
            if(queryNode(head))
                printf("成功找到學生記錄。\n\n");
            else
                printf("沒有找到要查詢的學生節點。\n\n");
            break;
        case 4:
            //修改學生記錄
            if(modifyNode(head))
                printf("成功修改一個學生記錄。\n\n");
            else
                printf("沒有找到要修改的學生節點。\n\n");
            break;
        case 5:
            //統計學生人數
            count = countNode(head);
            printf("學生人數為:%d\n\n",count);
            break;
        case 6:
            //顯示學生記錄
            displayNode(head);
            break;
        case 7:Store_List(head);
                cout<<"打印成功"<<endl; 
                system("pause");
                   system("cls");
            break;
        case 8:
            //退出前清除鏈表中的所有結點
            clearLink(head);
            return 0;
        default:
            printf("輸入不正確,應該輸入0-8之間的數。\n\n");
            system("pause");
            system("cls"); 
            break;
        }
    }
    return 0;
}

7.測試結果

C語言如何實現學生信息管理系統的文件操作

C語言如何實現學生信息管理系統的文件操作

C語言如何實現學生信息管理系統的文件操作

C語言如何實現學生信息管理系統的文件操作

C語言如何實現學生信息管理系統的文件操作

C語言如何實現學生信息管理系統的文件操作

讀到這里,這篇“C語言如何實現學生信息管理系統的文件操作”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西和县| 通海县| 库伦旗| 九龙城区| 齐齐哈尔市| 于都县| 中方县| 开封县| 杭锦旗| 连平县| 忻州市| 册亨县| 勃利县| 马山县| 疏附县| 靖宇县| 惠来县| 罗甸县| 永年县| 马鞍山市| 黄龙县| 梅河口市| 浏阳市| 湖南省| 河源市| 武安市| 西宁市| 吉木萨尔县| 冷水江市| 吉安县| 阳泉市| 屏东市| 铜川市| 武穴市| 肥东县| 子洲县| 漳平市| 棋牌| 桂林市| 华亭县| 慈溪市|