欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件操作)

 更新時(shí)間:2022年06月20日 11:51:47   作者:Demo龍  
這篇文章主要介紹了C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),增加了文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

前言:與上篇文章相比,增加了文件操作,可將任意時(shí)期的的學(xué)生數(shù)據(jù)存儲(chǔ)再文件中,菜單也隨之改動(dòng),增加了文件操作一欄,是否存儲(chǔ)到相應(yīng)文件中由使用者決定

新增函數(shù)——文件操作;

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

1.頭文件和預(yù)處理

#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

/* 定義學(xué)生結(jié)構(gòu)體的數(shù)據(jù)結(jié)構(gòu) */
typedef struct Student{
?? ?char studentNo[NO_LENGTH];
?? ?char studentName[NAME_LENGTH];
?? ?int score;
}st;

/* 定義每條記錄或節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu) */
typedef struct node
{
?? ?struct Student data; //數(shù)據(jù)域
?? ?struct node *next; //指針域
}Node,*Link; ?//Node為node類型的別名,Link為node類型的指針別名

2.定義學(xué)生結(jié)構(gòu)體的數(shù)據(jù)結(jié)構(gòu)

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

3.定義每條記錄或節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)

/* 定義每條記錄或節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu) */
typedef struct node
{
?? ?struct Student data; //數(shù)據(jù)域
?? ?struct node *next; //指針域
}Node,*Link; ?//Node為node類型的別名,Link為node類型的指針別名

4.函數(shù)接口代碼.

1.定義提示菜單

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

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

2.增加學(xué)生記錄

void inputStudent(Link l){
?? ? printf("請輸入學(xué)生學(xué)號(hào):");
?? ? scanf("%s",l->data.studentNo);
?? ? printf("請輸入學(xué)生的姓名:");
?? ? scanf("%s",l->data.studentName);
?? ?printf("請輸入學(xué)生的成績:");
?? ? scanf("%s",&(l->data.score));
?? ? //每個(gè)新創(chuàng)建的節(jié)點(diǎn)的next域都初始化為NULL
?? ? l->next = NULL;
?? ? system("cls");
}

3.輸入學(xué)號(hào)接口·

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

4.遍歷表中學(xué)生

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

5.增加學(xué)生記錄

/* 增加學(xué)生記錄 */
bool addNode(Link head){
?? ? Link p,q; ? //p,q兩個(gè)節(jié)點(diǎn)一前一后
?? ? Link node; ?//node指針指向新創(chuàng)建的節(jié)點(diǎn)
?? ? node=(Link)malloc(sizeof(Node));
?? ? inputStudent(node);

?? ? q = head;
?? ? p = head->next; ?//q指向head后面的第一個(gè)有效節(jié)點(diǎn)
?? ? if(head->next==NULL)
?? ??? ? //鏈表為空時(shí)
?? ??? ?head->next = node;
?? ? else {
?? ??? ? //循環(huán)訪問鏈表中的所有節(jié)點(diǎn)
?? ??? ?while(p != NULL){
?? ??? ??? ?if (node->data.studentNo < p->data.studentNo){
?? ??? ??? ??? ?//如果node節(jié)點(diǎn)的學(xué)號(hào)比p節(jié)點(diǎn)的學(xué)號(hào)小,則插在p的前面,完成插入后,提前退出子程序
?? ??? ??? ??? ?q->next = node;
?? ??? ??? ??? ?node->next = p;
?? ??? ??? ??? ?return true;
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?//如果node節(jié)點(diǎn)的學(xué)號(hào)比p節(jié)點(diǎn)的學(xué)號(hào)大,繼續(xù)向后移動(dòng)指針(依然保持pq一前一后)
?? ??? ??? ??? ?q = p;
?? ??? ??? ??? ?p = p->next;

?? ??? ??? ?}
?? ??? ?}
?? ??? ?//如果沒能提前退出循環(huán),則說明之前沒有插入,那么當(dāng)前node節(jié)點(diǎn)的學(xué)號(hào)是最大值,此時(shí)插在鏈表的最后面
?? ??? ?q->next = node;

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

6.刪除學(xué)生信息

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

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

7.查找學(xué)生信息

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

? ? //輸入要處理的學(xué)號(hào)
?? ?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<<" ? ?學(xué)號(hào):"<<p->data.studentNo<<" ?成績:"<<p->data.score<<endl;?
?? ??? ??? ?return true;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?p=p->next;
?? ??? ?}
?? ?}
?? ?cout<<"未找到該學(xué)生"<<endl;?
? ?system("cls");

?? ?return false;
}

8.修改學(xué)生信息

//修改學(xué)生信息?
bool modifyNode(Link head){
? ? // 按照給定的學(xué)號(hào)找到學(xué)生記錄節(jié)點(diǎn),如果修改成功返回true,如果沒找到學(xué)號(hào)返回false
?? ?
? ? //輸入要處理的學(xué)號(hào)
?? ?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<<"請輸入修改后的學(xué)號(hào)"<<endl;?
?? ??? ??? ?cin>>p->data.studentNo;
?? ??? ??? ?cout<<"請輸入修改后的成績"<<endl;?
?? ??? ??? ?cin>>p->data.score;
?? ??? ??? ?system("cls");
?? ??? ??? ?return true;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?p=p->next;
?? ??? ?}
?? ?}
?? ?cout<<"未找到該學(xué)生,請重新輸入學(xué)號(hào)"<<endl;?
?? ?system("cls");
?? ?return false;
}

9.統(tǒng)計(jì)學(xué)生人數(shù)

//統(tǒng)計(jì)學(xué)生人數(shù)
int countNode(Link head){
?? ?//統(tǒng)計(jì)學(xué)生人數(shù),掃描鏈表統(tǒng)計(jì)節(jié)點(diǎn)個(gè)數(shù),返回節(jié)點(diǎn)數(shù)
?? ?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建立起的所有的節(jié)點(diǎn)
}

11.文件操作

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

5.main函數(shù)

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

?? ?//建立head頭結(jié)點(diǎn),在這個(gè)程序中head指向頭結(jié)點(diǎn),頭結(jié)點(diǎn)data部分沒有內(nèi)容,其后續(xù)節(jié)點(diǎn)才有真正的數(shù)據(jù)
?? ?head = (Link)malloc(sizeof(Node));
?? ?head->next = NULL;

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

6.學(xué)生信息管理系統(tǒng)總源碼(可直接復(fù)制運(yùn)行)

#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

/* 定義學(xué)生結(jié)構(gòu)體的數(shù)據(jù)結(jié)構(gòu) */
typedef struct Student{
?? ?char studentNo[NO_LENGTH];
?? ?char studentName[NAME_LENGTH];
?? ?int score;
}st;

/* 定義每條記錄或節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu) */
typedef struct node
{
?? ?struct Student data; //數(shù)據(jù)域
?? ?struct node *next; //指針域
}Node,*Link; ?//Node為node類型的別名,Link為node類型的指針別名

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

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

void inputStudent(Link l){
?? ? printf("請輸入學(xué)生學(xué)號(hào):");
?? ? scanf("%s",l->data.studentNo);
?? ? printf("請輸入學(xué)生的姓名:");
?? ? scanf("%s",l->data.studentName);
?? ?printf("請輸入學(xué)生的成績:");
?? ? scanf("%d",&(l->data.score));
?? ? //每個(gè)新創(chuàng)建的節(jié)點(diǎn)的next域都初始化為NULL
?? ? l->next = NULL;
?? ? system("cls");
}

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

/* 增加學(xué)生記錄 */
bool addNode(Link head){
?? ? Link p,q; ? //p,q兩個(gè)節(jié)點(diǎn)一前一后
?? ? Link node; ?//node指針指向新創(chuàng)建的節(jié)點(diǎn)
?? ? node=(Link)malloc(sizeof(Node));
?? ? inputStudent(node);

?? ? q = head;
?? ? p = head->next; ?//q指向head后面的第一個(gè)有效節(jié)點(diǎn)
?? ? if(head->next==NULL)
?? ??? ? //鏈表為空時(shí)
?? ??? ?head->next = node;
?? ? else {
?? ??? ? //循環(huán)訪問鏈表中的所有節(jié)點(diǎn)
?? ??? ?while(p != NULL){
?? ??? ??? ?if (node->data.studentNo < p->data.studentNo){
?? ??? ??? ??? ?//如果node節(jié)點(diǎn)的學(xué)號(hào)比p節(jié)點(diǎn)的學(xué)號(hào)小,則插在p的前面,完成插入后,提前退出子程序
?? ??? ??? ??? ?q->next = node;
?? ??? ??? ??? ?node->next = p;
?? ??? ??? ??? ?return true;
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?//如果node節(jié)點(diǎn)的學(xué)號(hào)比p節(jié)點(diǎn)的學(xué)號(hào)大,繼續(xù)向后移動(dòng)指針(依然保持pq一前一后)
?? ??? ??? ??? ?q = p;
?? ??? ??? ??? ?p = p->next;

?? ??? ??? ?}
?? ??? ?}
?? ??? ?//如果沒能提前退出循環(huán),則說明之前沒有插入,那么當(dāng)前node節(jié)點(diǎn)的學(xué)號(hào)是最大值,此時(shí)插在鏈表的最后面
?? ??? ?q->next = node;

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

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

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

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

? ? //輸入要處理的學(xué)號(hào)
?? ?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<<" ? ?學(xué)號(hào):"<<p->data.studentNo<<" ?成績:"<<p->data.score<<endl;?
?? ??? ??? ?return true;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?p=p->next;
?? ??? ?}
?? ?}
?? ?cout<<"未找到該學(xué)生"<<endl;?
? ?system("cls");

?? ?return false;
}

//修改學(xué)生信息?
bool modifyNode(Link head){
? ? // 按照給定的學(xué)號(hào)找到學(xué)生記錄節(jié)點(diǎn),如果修改成功返回true,如果沒找到學(xué)號(hào)返回false
?? ?
? ? //輸入要處理的學(xué)號(hào)
?? ?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<<"請輸入修改后的學(xué)號(hào)"<<endl;?
?? ??? ??? ?cin>>p->data.studentNo;
?? ??? ??? ?cout<<"請輸入修改后的成績"<<endl;?
?? ??? ??? ?cin>>p->data.score;
?? ??? ??? ?system("cls");
?? ??? ??? ?return true;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?p=p->next;
?? ??? ?}
?? ?}
?? ?cout<<"未找到該學(xué)生,請重新輸入學(xué)號(hào)"<<endl;?
?? ?system("cls");
?? ?return false;
}

//統(tǒng)計(jì)學(xué)生人數(shù)
int countNode(Link head){
?? ?//統(tǒng)計(jì)學(xué)生人數(shù),掃描鏈表統(tǒng)計(jì)節(jié)點(diǎn)個(gè)數(shù),返回節(jié)點(diǎn)數(shù)
?? ?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建立起的所有的節(jié)點(diǎn)
}

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

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

7.測試結(jié)果

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MFC命名規(guī)則匯總

    MFC命名規(guī)則匯總

    這篇文章主要介紹了MFC命名規(guī)則,對(duì)于初學(xué)者而言需要牢固掌握這類規(guī)則,需要的朋友可以參考下
    2014-07-07
  • c++引用傳參和指針傳參的區(qū)別及說明

    c++引用傳參和指針傳參的區(qū)別及說明

    這篇文章主要介紹了c++引用傳參和指針傳參的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 深入了解C語言結(jié)構(gòu)化的程序設(shè)計(jì)

    深入了解C語言結(jié)構(gòu)化的程序設(shè)計(jì)

    這篇文章主要介紹了C語言編程中程序的一些基本的編寫優(yōu)化技巧,文中涉及到了基礎(chǔ)的C程序內(nèi)存方面的知識(shí),非常推薦!需要的朋友可以參考下
    2021-07-07
  • QT使用SQLite數(shù)據(jù)庫超詳細(xì)教程(增刪改查、對(duì)大量數(shù)據(jù)快速存儲(chǔ)和更新)

    QT使用SQLite數(shù)據(jù)庫超詳細(xì)教程(增刪改查、對(duì)大量數(shù)據(jù)快速存儲(chǔ)和更新)

    這篇文章主要給大家介紹了關(guān)于QT使用SQLite數(shù)據(jù)庫的相關(guān)資料,其中包括增刪改查以及對(duì)大量數(shù)據(jù)快速存儲(chǔ)和更新,SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它是一個(gè)軟件庫,提供了一個(gè)自包含、無服務(wù)器、零配置的、事務(wù)性的SQL數(shù)據(jù)庫引擎,需要的朋友可以參考下
    2024-01-01
  • C語言之平衡二叉樹詳解

    C語言之平衡二叉樹詳解

    平衡二叉樹是具有平衡屬性的有序二叉樹,本文主要介紹了C語言中的平衡二叉樹,具有一定的參考價(jià)值,需要的小伙伴可以參考閱讀
    2023-04-04
  • 詳解C++11中的右值引用與移動(dòng)語義

    詳解C++11中的右值引用與移動(dòng)語義

    本篇文章主要介紹了詳解C++11中的右值引用與移動(dòng)語義,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 基于C語言實(shí)現(xiàn)掃雷游戲

    基于C語言實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 詳解C++中移動(dòng)語義的概念與使用

    詳解C++中移動(dòng)語義的概念與使用

    本篇文章主要為大家詳細(xì)介紹了C++中移動(dòng)語義的相關(guān)知識(shí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2023-06-06
  • 用C語言實(shí)現(xiàn)貪吃蛇小游戲

    用C語言實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了用C語言實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言數(shù)組a和&a的區(qū)別講解

    C語言數(shù)組a和&a的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于C語言數(shù)組a和&a的區(qū)別講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評(píng)論