1. 程式人生 > 程式設計 >C語言版學生資訊管理系統

C語言版學生資訊管理系統

本文例項為大家分享了C語言版學生資訊管理系統的具體程式碼,供大家參考,具體內容如下

一.題目分析

1.功能概述

1)查詢學生資訊
2)新增學生資訊
3)修改學生資訊
4)刪除學生資訊
5)重新整理學生資訊
6)儲存學生資訊
7)輸出當前學生資訊

2.題目要求:

1)使用結構體建立學生資訊體制
2)實現七大基本功能
3)採用檔案儲存學生資訊

二.演算法構造

1.難點解析----對檔案的操作

1.1檔案讀取

FILE * fp;
 if ((fp = fopen(filename,"r")) == NULL) return 0;
 //從檔案讀取資訊 
 while (fscanf(fp,"%s %s %s %d %d %d %d ",&stu[j].StudentId,&stu[j].StudentName,&stu[j].StudentAge,&stu[j].StudentSex,&stu[j].score[0],&stu[j].score[1],&stu[j].score[2]) == 7) {
 j++;
 }

1.2檔案寫入

FILE * fp;
fp = fopen(filename,"w");
 for (i = 0; i < n; i++){
 fprintf(fp,"%s%s%d%c%.lf%.lf%.lf\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
 }

2.流程圖

C語言版學生資訊管理系統

3.七大基本功能----函式實現

3.1選單函式:通過選單建立使用者與程式之間的交流

void menu()/* 介面*/
{
 int num;
 printf(" \n\n  \n\n");
 printf(" ******************************************************\n\n");
 printf(" * 學生資訊管理系統  *\n \n");
 printf(" ******************************************************\n\n");
 printf("*********************系統功能選單************************* \n");
 printf(" ---------------------- ---------------------- \n");
 printf(" ********************************************* \n");
 printf(" * 0.系統幫助及說明 * * 1.重新整理學生資訊 * \n");
 printf(" ********************************************* \n");
 printf(" * 2.查詢學生資訊 * * 3.修改學生資訊 * \n");
 printf(" ********************************************* \n");
 printf(" * 4.增加學生資訊 * * 5.按學號刪除資訊 * \n");
 printf(" ********************************************* \n");
 printf(" * 6.顯示當前資訊 * * 7.儲存當前學生資訊* \n");
 printf(" ********************** ********************** \n");
 printf(" * 8.退出系統 *  \n");
 printf(" **********************  \n");
 printf(" ---------------------- ----------------------  \n");
 printf("請選擇選單編號:");
 scanf("%d",&num);
 switch (num)
 {
 case 0:help(); break;
 case 1:flush(); break;
 case 2:seek(); break;
 case 3:modify(); break;
 case 4:insert(); break;
 case 5:del(); break;
 case 6:display(); break;
 case 7:save(); break;
 case 8:
 k = 0; 
 printf("即將退出程式!\n");
 break;
 default:printf("請在0-8之間選擇\n");
 }
}

3.2系統幫助與說明函式:適用於初次接觸學生資訊管理系統的使用者參考

void help()
{
 printf("\n0.歡迎使用系統幫助!\n");
 printf("\n1.初次進入系統後,請先選擇增加學生資訊;\n");
 printf("\n2.按照選單提示鍵入數字代號;\n");
 printf("\n3.增加學生資訊後,切記儲存;\n");
 printf("\n4.謝謝您的使用!\n");
}

3.3重新整理學生資訊函式

功能:呼叫重新整理資訊函式後,檔案中再無學生資訊

int flush(){
 char filename[LEN + 1];
 int i = 0;
 printf("請輸入要重新整理學生資訊的檔名:\n");
 scanf("%s",filename);
 int j = 0;
 FILE * fp;
 if ((fp = fopen(filename,&stu[j].score[2]) == 7) {
 j++;
 }
 n = j;
 printf("重新整理成功!!!");
 return n;
}

3.4查詢學生資訊函式

功能:通過輸入要查詢的學生學號或者姓名,與系統中的學生資訊進行對比,若相等,則輸出該學生的基本資訊;反之,則輸出該學生在該管理系統中不存在

查詢方式:

1)按照學號查詢
2)按照姓名查詢

void seek() /*查詢*/
{
 int i,item,flag;
 char s1[21]; /* 以姓名和學號最長長度+1為準*/
 printf("------------------\n");
 printf("-----1.按學號查詢-----\n");
 printf("-----2.按姓名查詢-----\n");
 printf("-----3.退出本選單-----\n");
 printf("------------------\n");
 while (1)
 {
 printf("請選擇子選單編號:");
 scanf("%d",&item);
 flag = 0;
 switch (item)
 {
 case 1:
 printf("請輸入要查詢的學生的學號:\n");
 scanf("%s",s1);
 for (i = 0; i<n; i++)
 if (strcmp(s1,stu[i].StudentId) == 0)
 {
 flag = 1;
 printf("學生學號\t學生姓名\t年齡\t性別\tC語言成績\t高等數學\t大學英語成績\n");
 printf("--------------------------------------------------------------------\n");
 printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n",stu[i].score[2]);
 }
 if (0 == flag)
 printf("該學號不存在!\n"); break;
 case 2:
 printf("請輸入要查詢的學生的姓名:\n");
 scanf("%s",s1);
 for (i = 0; i<n; i++)
 if (strcmp(stu[i].StudentName,s1) == 0)
 {
 flag = 1;
 printf("學生學號\t學生姓名\t年齡\t性別\tC語言成績\t高等數學\t大學英語成績\n");
 printf("--------------------------------------------------------------------\n");
 printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n",stu[i].score[2]);
 }
 if (0 == flag)
 printf("該姓名不存在!\n"); break;
 case 3:return;
 default:printf("請在1-3之間選擇\n");
 }
 }
}

3.5修改學生資訊

功能:通過輸入學號來選擇要修改的該學號學生的資訊內容,從而完成修改資訊操作;

//修改學生資訊
void modify() /*修改資訊*/
{
 int i,num = -1;
 char sex1,s1[LEN + 1],s2[LEN + 1]; /* 以姓名和學號最長長度+1為準*/
 float score1;
 printf("請輸入要要修改的學生的學號:\n");
 scanf("%s",s1);
 for (i = 0; i < n; i++){
 if (strcmp(stu[i].StudentId,s1) == 0){/*比較字串是否相等*/
 num = i;
 printf("------------------\n");
 printf("1.修改姓名\n");
 printf("2.修改年齡\n");
 printf("3.修改性別\n");
 printf("4.修改C語言成績\n");
 printf("5.修改高等數學成績\n");
 printf("6.修改大學英語成績\n");
 printf("7.退出本選單\n");
 printf("------------------\n");
 while (1)
 {
 printf("請選擇子選單編號:");
 scanf("%d",&item);
 switch (item)
 {
 case 1:
 printf("請輸入新的姓名:\n");
 scanf("%s",s2);
 strcpy(stu[num].StudentName,s2);
 break;
 case 2:
 printf("請輸入新的年齡:\n");
 scanf("%d",stu[num].StudentAge);
 break;
 case 3:
 printf("請輸入新的性別:\n");
 scanf("%s",&sex1);
 stu[i].StudentSex = sex1;
 break;
 case 4:
 printf("請輸入新的C語言成績:\n");
 scanf("%f",&score1);
 stu[num].score[0] = score1;
 break;
 case 5:
 printf("請輸入新的高等數學成績:\n");
 scanf("%f",&score1);
 stu[num].score[1] = score1;
 break;
 case 6:
 printf("請輸入新的大學英語成績:\n");
 scanf("%f",&score1);
 stu[num].score[2] = score1;
 break;
 case 7: return;
 default:printf("請在1-7之間選擇\n");
 }
 }
 printf("修改完畢!請及時儲存!\n");
 }
 else{
 printf("沒有該學生學號!!!");
 }
 }
}

3.6新增學生資訊函式

功能:新增學生資訊,並儲存至檔案中

//新增學生資訊函式
void insert() /*插入函式*/
{
 int i = n,j,flag;
 printf("請輸入待增加的學生數:\n");
 scanf("%d",&m);
 if (m > 0){
 do
 {
 flag = 1;
 while (flag)
 {
 flag = 0;
 printf("請輸入第%d位學生的學號:\n",i + 1);
 scanf("%s",stu[i].StudentId);
 for (j = 0; j < i; j++){
 if (strcmp(stu[i].StudentId,stu[j].StudentId) == 0){
 printf("該學號已存在,請重新輸入!\n");
 flag = 1;
 break;
 }
 }
 }
 printf("請輸入第%d 個學生的姓名:\n",i+1);
 scanf("%s",stu[i].StudentName);
 printf("請輸入第%d 個學生的年齡:\n",i+1);
 scanf("%d",&stu[i].StudentAge);
 printf("請輸入第%d 個學生的性別:\n",i+1);
 scanf(" %c",&stu[i].StudentSex);
 printf("請輸入第%d 個學生的C語言成績\n",i+1);
 scanf("%f",&stu[i].score[0]);
 printf("請輸入第%d 個學生的高等數學成績:\n",&stu[i].score[1]);
 printf("請輸入第%d 個學生的大學英語成績:\n",&stu[i].score[2]);
 if (0 == flag){
 i++;
 }
 } while (i<n + m);
 }
 n += m;
 printf("學生資訊增加完畢!!!\n");
 system("pause");
}

3.7刪除學生資訊函式

功能:通過輸入要刪除學生資訊的學號,刪除該學生在該管理系統中的所有資訊;

//刪除學生資訊函式
void del()
{
 int i,flag = 0;
 char s1[LEN + 1];
 printf("請輸入要刪除學生的學號:\n");
 scanf("%s",s1);
 for (i = 0; i < n; i++){
 if (strcpy(stu[i].StudentId,s1) == 0){
 flag = 1;
 //要刪除學生後面的學生往前移一位
 for (j = i; j < n - 1; j++){
 stu[j] = stu[j + 1];
 }
 }
 }
 //查詢失敗
 if (0 == flag){
 printf("該學號不存在!!!\n");
 }
 if (1 == flag){
 printf("刪除成功!!!");
 //刪除成功,學生人數減1
 n--;
 }
 system("pause");
}

3.8顯示當前學生資訊

功能:可以輸出進行多種操作後的學生資訊管理系統中的所有學生資訊;

//顯示全部資料資訊
void display()
{
 int i;
 printf("共有%d位學生的資訊:\n",n);
 if (0 != n)
 {
 printf("學生學號 \t學生姓名 \t年齡 \t性別 \tC語言成績\t高等數學 \t大學英語成績\n");
 printf("--------------------------------------------------------------------\n");
 for (i = 0; i<n; i++)
 {
 printf("%s \t%s \t%d \t%c \t%.1f\t%.1f \t%.1f\n",stu[i].score[2]);
 }
 }
 system("pause");
}

3.8儲存學生資訊

功能:將進行某些操作後的學生資訊儲存到指定檔案中

void save(){
 int i;
 FILE *fp;
 char filename[LEN + 1];
 printf("請輸入要儲存的檔名:\n");
 scanf("%s",filename);
 fp = fopen(filename,stu[i].score[2]);
 }
 printf("儲存成功!!!\n");
 fclose(fp);
 system("pause");
}

三.源程式程式碼

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h> /*I/O函式*/
#include<stdlib.h> /*其它說明*/
#include<string.h> /*字串函式*/

#define LEN 15 /* 學號和姓名最大字元數,實際請更改*/
#define N 50 /* 最大學生人數,實際請更改*/

int k = 1,n = 0,m = 0;/* n代表當前記錄的學生人數*/

//函式宣告
void readfile();
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();

//結構體儲存學生資訊
struct student{
 char StudentId[LEN+1];
 char StudentName[LEN+1];
 int StudentAge;
 char StudentSex;
 float score[3];
}stu[N];

//主函式
int main()
{
 while (k)
 {
 menu();
 }
 system("pause");
 return 0;
}

//系統幫助函式
void help()
{
 printf("\n0.歡迎使用系統幫助!\n");
 printf("\n1.初次進入系統後,切記儲存;\n");
 printf("\n4.謝謝您的使用!\n");
}

//重新整理檔案
int flush(){
 char filename[LEN + 1];
 int i = 0;
 printf("請輸入要重新整理學生資訊的檔名:\n");
 scanf("%s",&stu[j].score[2]) == 7) {
 j++;
 }
 n = j;
 printf("重新整理成功!!!");
 return n;
}

//查詢學生資訊
void seek() /*查詢*/
{
 int i,stu[i].score[2]);
 }
 if (0 == flag)
 printf("該姓名不存在!\n"); break;
 case 3:return;
 default:printf("請在1-3之間選擇\n");
 }
 }
}

//修改學生資訊
void modify() /*修改資訊*/
{
 int i,&score1);
 stu[num].score[2] = score1;
 break;
 case 7: return;
 default:printf("請在1-7之間選擇\n");
 }
 }
 printf("修改完畢!請及時儲存!\n");
 }
 else{
 printf("沒有該學生學號!!!");
 }
 }
}

void sort()//按學號排序
{
 int i,k,*p,*q,s;
 char temp[LEN + 1],ctemp;
 float ftemp;
 for (i = 0; i<n - 1; i++)
 {
 for (j = n - 1; j>i; j--)
 if (strcmp(stu[j - 1].StudentId,stu[j].StudentId)>0)
 {
 strcpy(temp,stu[j - 1].StudentId);
 strcpy(stu[j - 1].StudentId,stu[j].StudentId);
 strcpy(stu[j].StudentId,temp);
 strcpy(temp,stu[j - 1].StudentName);
 strcpy(stu[j - 1].StudentName,stu[j].StudentName);
 strcpy(stu[j].StudentName,temp);
 ctemp = stu[j - 1].StudentSex;
 stu[j - 1].StudentSex = stu[j].StudentSex;
 stu[j].StudentSex = ctemp;
 p = &stu[j - 1].StudentAge;
 q = &stu[j].StudentAge;
 s = *q;
 *q = *p;
 *p = s;
 for (k = 0; k<3; k++)
 {
 ftemp = stu[j - 1].score[k];
 stu[j - 1].score[k] = stu[j].score[k];
 stu[j].score[k] = ftemp;
 }
 }
 }
}

//新增學生資訊函式
void insert() /*插入函式*/
{
 int i = n,&stu[i].score[2]);
 if (0 == flag){
 i++;
 }
 } while (i<n + m);
 }
 n += m;
 printf("學生資訊增加完畢!!!\n");
 system("pause");
}

//刪除學生資訊函式
void del()
{
 int i,s1) == 0){
 flag = 1;
 //要刪除學生後面的學生往前移一位
 for (j = i; j < n - 1; j++){
 stu[j] = stu[j + 1];
 }
 }
 }
 //查詢失敗
 if (0 == flag){
 printf("該學號不存在!!!\n");
 }
 if (1 == flag){
 printf("刪除成功!!!");
 //刪除成功,學生人數減1
 n--;
 }
 system("pause");
}

//顯示全部資料資訊
void display()
{
 int i;
 printf("共有%d位學生的資訊:\n",stu[i].score[2]);
 }
 }
 system("pause");
}

void save(){
 int i;
 FILE *fp;
 char filename[LEN + 1];
 printf("請輸入要儲存的檔名:\n");
 scanf("%s",stu[i].score[2]);
 }
 printf("儲存成功!!!\n");
 fclose(fp);
 system("pause");
}

void menu()/* 介面*/
{
 int num;
 printf(" \n\n  \n\n");
 printf(" ******************************************************\n\n");
 printf(" * 學生資訊管理系統  *\n \n");
 printf(" ******************************************************\n\n");
 printf("*********************系統功能選單************************* \n");
 printf(" ---------------------- ---------------------- \n");
 printf(" ********************************************* \n");
 printf(" * 0.系統幫助及說明 * * 1.重新整理學生資訊 * \n");
 printf(" ********************************************* \n");
 printf(" * 2.查詢學生資訊 * * 3.修改學生資訊 * \n");
 printf(" ********************************************* \n");
 printf(" * 4.增加學生資訊 * * 5.按學號刪除資訊 * \n");
 printf(" ********************************************* \n");
 printf(" * 6.顯示當前資訊 * * 7.儲存當前學生資訊* \n");
 printf(" ********************** ********************** \n");
 printf(" * 8.退出系統 *  \n");
 printf(" **********************  \n");
 printf(" ---------------------- ----------------------  \n");
 printf("請選擇選單編號:");
 scanf("%d",&num);
 switch (num)
 {
 case 0:help(); break;
 case 1:flush(); break;
 case 2:seek(); break;
 case 3:modify(); break;
 case 4:insert(); break;
 case 5:del(); break;
 case 6:display(); break;
 case 7:save(); break;
 case 8:
 k = 0; 
 printf("即將退出程式!\n");
 break;
 default:printf("請在0-8之間選擇\n");
 }
}

四.除錯、測試以及實驗結果

1.除錯:

C語言版學生資訊管理系統

2.測試:

輸入資料型別與定義時不符合,程式執行過程中會出現錯誤

C語言版學生資訊管理系統

3.實驗結果:

(1)~(9)是一個連續的執行實驗結果

(1)執行選單

C語言版學生資訊管理系統

(2)新增學生資訊

C語言版學生資訊管理系統

(3)儲存學生資訊

C語言版學生資訊管理系統

(4)顯示全部資訊

C語言版學生資訊管理系統

(5)修改學生資訊

C語言版學生資訊管理系統

(6)顯示修改後全部資訊

C語言版學生資訊管理系統

(7)重新整理學生資訊

C語言版學生資訊管理系統

(8)儲存學生資訊

C語言版學生資訊管理系統

(9)顯示重新整理後的全部資訊

C語言版學生資訊管理系統

五、總結

編寫一個功能齊全的、方便使用者操作的學生管理系統,需要長期的實踐與積累。
實踐時檢驗的好辦法,學到的知識經過實踐的檢驗,才能更好的被自身吸收。檔案的操作的程式編寫應用對我來說,是一個沒有經過多次實踐的問題,所以我在寫這部分程式時,還是有些難度。該程式中還存在一個問題就是,當輸入一個與定義時不符的資料,程式在執行過程中會出現錯誤,修改辦法還在思考,歡迎大家來與我互相共勉。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。