C语言 链表实现学生管理系统(含文件读写操作)
生活随笔
收集整理的這篇文章主要介紹了
C语言 链表实现学生管理系统(含文件读写操作)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
主程序:
#define _CRT_SECURE_NO_WARNINGS//跳過(guò)安全警告 #include "nodes.h"int main() {C* class0 = Clacreat();// 新建班級(jí)while(1){menu();//菜單func(class0);//功能選擇system("pause");//暫停system("cls"); //清屏}return 0; }具體功能實(shí)現(xiàn):
#include <stdio.h> #include <stdlib.h> #define Maxnum 50//班級(jí)最大容量typedef struct Student {//學(xué)生信息char name[20];int num;int age;int math;int english;int physics;int sumsco; }S;typedef struct Class {//班級(jí)信息S studat;struct Class* next; }C;/* menu func creat:0 add:1 delect:2 search:3 update:4 fwrite fread */void menu() {printf(" \n");printf(" **************系統(tǒng)菜單**************\n");printf(" * 0.增加學(xué)生信息 * * 1.刪除學(xué)生信息*\n");printf(" * * * *\n");printf(" *--------------- * * --------------*\n");printf(" * * * *\n");printf(" * 2.查詢(xún)學(xué)生信息 * * 3.修改學(xué)生信息*\n");printf(" * * * *\n");printf(" *--------------- * * --------------*\n");printf(" * * * *\n");printf(" * 4.瀏覽學(xué)生信息 * * 5.按照學(xué)號(hào)排序*\n");printf(" * * * *\n");printf(" *--------------- * * --------------*\n");printf(" * * * *\n");printf(" * 6.寫(xiě)入文件 * * 7.讀取文件 *\n");printf(" * * * *\n");printf(" *--------------- * * --------------*\n");printf(" * * * *\n");printf(" * 8.退出系統(tǒng) * * *\n");printf(" ************************************\n"); }struct Class* Clacreat() {//創(chuàng)建班級(jí)體C* newClass = (C*)malloc(sizeof(C));newClass->next = NULL;return newClass; }struct Class* Claadd(S stu) {//增加班級(jí)學(xué)生C* newStudent = (C*)malloc(sizeof(C));newStudent->studat = stu;newStudent->next = NULL;return newStudent; }struct Student stuadd() {//創(chuàng)建學(xué)生信息S newStudent;printf("請(qǐng)輸入學(xué)生姓名:");scanf("%s", newStudent.name);printf("請(qǐng)輸入學(xué)生學(xué)號(hào):");scanf("%d", &(newStudent.num));printf("請(qǐng)輸入學(xué)生年齡:");scanf("%d", &newStudent.age);printf("請(qǐng)輸入學(xué)生數(shù)學(xué)成績(jī):");scanf("%d",&newStudent.math);printf("請(qǐng)輸入學(xué)生英語(yǔ)成績(jī):");scanf("%d",&newStudent.english);printf("請(qǐng)輸入學(xué)生物理成績(jī):");scanf("%d",&newStudent.physics);newStudent.sumsco = newStudent.math + newStudent.english + newStudent.physics;return newStudent; }void delstu(C* class0,int tem) {//刪去if (class0->next == NULL) {printf("班級(jí)為空!\n");return;}C* p = class0;while (p->next != NULL && (p->next->studat.num != tem)) {p = p->next;}if (p->next == NULL) {printf("該班級(jí)無(wú)此學(xué)生!\n");return;}p->next = p->next->next; }void searstu(C* class0, int tem) {//查找if (class0->next == NULL) {printf("班級(jí)為空!\n");return;}C* p = class0;while (p->next != NULL && (p->next->studat.num!=tem)) {p = p->next;}if (p->next == NULL) {printf("該班級(jí)無(wú)此學(xué)生!\n");return;}p = p->next;printf("姓名\t學(xué)號(hào)\t年齡\t\t數(shù)學(xué)成績(jī)\t英語(yǔ)成績(jī)\t物理成績(jī)\t總成績(jī)\n");printf("%s\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p->studat.name, p->studat.num, p->studat.age, (p->studat.math), (p->studat.english), (p->studat.physics), (p->studat.sumsco)); }void updstu(C* class0, int tem) {//更新if (class0->next == NULL) {printf("班級(jí)為空!\n");return;}C* p = class0;while (p->next != NULL && (p->next->studat.num != tem)) {p = p->next;}if (p->next == NULL) {printf("該班級(jí)無(wú)此學(xué)生!\n");return;}p = p->next;printf("請(qǐng)輸入學(xué)生姓名:");scanf("%s", p->studat.name);printf("請(qǐng)輸入學(xué)生學(xué)號(hào):");scanf("%d", &(p->studat.num));printf("請(qǐng)輸入學(xué)生年齡:");scanf("%d", &p->studat.age);printf("請(qǐng)輸入學(xué)生數(shù)學(xué)成績(jī):");scanf("%d", &p->studat.math);printf("請(qǐng)輸入學(xué)生英語(yǔ)成績(jī):");scanf("%d", &p->studat.english);printf("請(qǐng)輸入學(xué)生物理成績(jī):");scanf("%d", &p->studat.physics);p->studat.sumsco = p->studat.math + p->studat.english + p->studat.physics; }void allOut(C* class0) {//輸出整個(gè)鏈表if (class0->next == NULL) {printf("班級(jí)為空!\n");return;}C* p = class0->next;printf("姓名\t學(xué)號(hào)\t年齡\t\t數(shù)學(xué)成績(jī)\t英語(yǔ)成績(jī)\t物理成績(jī)\t總成績(jī)\n");do {printf("%s\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",p->studat.name,p->studat.num,p->studat.age, p->studat.math, p->studat.english, p->studat.physics, p->studat.sumsco);p = p->next;} while (p!=NULL); }void allSort(C* class0) {//按照學(xué)號(hào)排序if (class0->next == NULL) {printf("班級(jí)為空!\n");return;}for (int i = 0; i < Maxnum; i++) {C* pc = class0->next;S tem;while (pc->next != NULL) {if ((pc->studat.num) > (pc->next->studat.num)) {tem = pc->studat;pc->studat = pc->next->studat;pc->next->studat = tem;}pc = pc->next;}} }void writeFile(C* class0, char* filename) {if (class0->next == NULL) {printf("班級(jí)為空!\n");return;}FILE *fp;C* tem = class0;allSort(tem);C* p = tem->next;fp = fopen(filename,"w");fprintf(fp, "姓名\t學(xué)號(hào)\t年齡\t數(shù)學(xué)成績(jī)\t英語(yǔ)成績(jī)\t物理成績(jī)\t總成績(jī)\n");//為文件添加表頭while (p != NULL) {fprintf(fp, "%s\t%d\t%d\t%d\t%d\t%d\t%d\n", p->studat.name, p->studat.num, p->studat.age, p->studat.math, p->studat.english, p->studat.physics, p->studat.sumsco);p = p->next;}fclose(fp); }void readFile(C* class0, char* filename) {FILE* fp;fp = fopen(filename, "r");if (fp==NULL) {printf("文件不存在!");return;} //struct Class* Claadd(S stu)C* last = class0;fseek(fp,sizeof("姓名\t學(xué)號(hào)\t年齡\t數(shù)學(xué)成績(jī)\t英語(yǔ)成績(jī)\t物理成績(jī)\t總成績(jī)\n"), SEEK_SET);//讀取文件時(shí)跳過(guò)第一行的表頭while (1) {S studat;if (fscanf(fp, "%s\t%d\t%d\t%d\t%d\t%d\t%d\n", studat.name, &studat.num, &studat.age, &studat.math, &studat.english, &studat.physics, &studat.sumsco) != EOF) {C* p = Claadd(studat);last->next = p;last = p;}else {break;}}allSort(class0);fclose(fp); }void func(C* class0) {int Func;printf("\n 功能選擇:");scanf_s("%d", &Func);printf("\n");switch (Func) {case 0: {C* claS = Claadd(stuadd());claS->next = class0->next;class0->next = claS;printf("\nadd success!\n");break; }case 1: {int tem;printf("請(qǐng)輸入需要?jiǎng)h除的學(xué)生學(xué)號(hào):");scanf("%d",&tem);delstu(class0, tem);printf("\ndelect success!\n");break; }case 2: {int tem;printf("請(qǐng)輸入需要查找的學(xué)生學(xué)號(hào):");scanf("%d", &tem);searstu(class0, tem);printf("\nsearch success!\n");break; }case 3: {int tem;printf("請(qǐng)輸入需要修改的學(xué)生的學(xué)號(hào):");scanf("%d", &tem);updstu(class0, tem);printf("\nupdate success!\n");break; }case 4: {allOut(class0);printf("\nout success!\n");break; }case 5: {allSort(class0);printf("\nresort success!\n");break; }case 6: {char filename[20];printf("輸入文件名稱(chēng):");scanf("%s", filename);writeFile(class0,filename);printf("\nsave success!\n");break; }case 7: {char filename[20];printf("輸入文件名稱(chēng):");scanf("%s", filename);readFile(class0, filename);printf("\nread success!\n");break;}case 8: {printf("\nexit success!\n");exit(1); }default: {printf("\n無(wú)此項(xiàng)功能!\n"); }} }總結(jié)
以上是生活随笔為你收集整理的C语言 链表实现学生管理系统(含文件读写操作)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 链表基本功能:初始化、增、删、查、改
- 下一篇: 第1章 计算机系统概述小节