❶ c語言參考選題
必選題參考:
1 功能描述
設某班有n位同學,每位同學的數據包括以下內容:學號(字元串)、姓名(字元串)、數學成績(整型)、程序設計成績(整型)。設計程序完成以下五項功能:新建數據檔案、添加數據、刪除數據、對輸入的數據進行排序和查詢。注意:輸入數據時,要求學號不能相同,姓名可以相同。
2 具體設計要求
(一)程序運行時,首先顯示主菜單如下:
1.新建數據
2.添加數據
3.刪除數據
4.排序
5.查詢
6.退出
屏幕提示:請輸入序號選擇相應操作。
要求當用戶輸入任一序號後,程序都能進行相應操作。
(二)在主菜單中選擇序號4,彈出子菜單選擇排序方式,子菜單如下:
1.數學成績排序
2.程序設計成績排序
3.總分排序。
4.返回主菜單
請按序號選擇相應操作。
選擇子菜單的序號後,程序能正確運行並在屏幕上顯示按要求排序後的相關信息。
(三)在主菜單中選擇序號5,彈出子菜單選擇查詢方式,子菜單如下:
1.學號查詢
2.姓名查詢
3.數學成績查詢
4.程序設計成績查詢
5.總分查詢
6.返回主菜單
請按序號選擇相應操作。
在子菜單中選擇序號後,程序按以下方式工作:
1)學號查詢:輸入學號後,若該學號存在則顯示與其相關的所有信息,否則顯示找不到的提示信息;(提示:查詢到滿足條件的結果後,查詢即可結束)
2)姓名查詢:輸入姓名後,若該姓名存在則顯示與其相關的所有信息,否則顯示找不到的提示信息;(提示:使用字元串比較函數進行比較)
3)按科目查詢:輸入指定分數,程序運行後顯示該科目中考試成績大於等於指定分數的同學的學號、姓名以及該科成績並統計滿足條件的人數;
4)總分查詢:輸入指定分數,程序運行後顯示總分成績大於等於指定分數的同學的學號、姓名以及各科成績並統計滿足條件的人數。
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
1 題目簡述
國際化的社會我們離不開快捷的交通工具,航班信息的保存和管理將變得十分必要。本課題旨在建立一個航班信息管理系統,系統中保存著各航線、航班號、航班日期、機型以及所屬公司(國航、南航、美聯航、漢莎等)等信息,通過該系統的簡單界面可以對文件進行新建、瀏覽、查找、更新、刪除等操作。
2 具體要求
基本功能
(1)添加記錄
先判斷鏈表是否已經存在。若不存在,需首先自動新建一個鏈表,然後再添加一條或多條通訊記錄。
(2)顯示記錄
顯示當前所有記錄。
(3)查詢記錄
按命名查找,並顯示該記錄。
(4)航班號的排序
按航班號的字母順序排序,涉及到冒泡等排序演算法。
(5)刪除記錄
實現逐條刪除和刪除全部記錄兩種功能。
(6)更新記錄
修改已存在記錄的信息(提示:需首先判斷該記錄是否存在)。
(7)按關系類別顯示記錄
只顯示指定航空公司的記錄(國航、南航、美聯航、漢莎)的記錄。
(8)保存記錄
存儲所有記錄到某個文件(.txt)或預設文件(flight.txt)。
(9)讀入記錄
從某個文件(.txt)或預設文件(flight.txt)讀入所有記錄。首先判斷當前是否有記錄在進行操作,若有,進行存儲或放棄存儲,然後釋放內存空間,之後才能從文件讀入記錄。
(10)退出
結束軟體操作,釋放內存後退出。
數據錄入提示
(1)航線
自己對航線的命名。為了實現排序,可以輸入英文或拼音的姓名,便於調用字元串比較等函數進行比較排序。
(2)航班號
每個航空公司的開頭字母應該相同
(3)航班日期
輸入時要判斷一下是否是正確的日期格式。(類似對輸入數據的判斷可作為擴展,不是必須實現的功能)。
(4)機型
737,747,757,A-380
(5)所屬公司
可以為國航, 南航, 美聯航或漢莎的一種,用於進行條件顯示,即只顯示與航班有某種關系的記錄。
其他實現提示
對於每一項功能,應該對可能出現的異常操作進行處理,如提示重新輸入或給出錯誤提示後成功返回主菜單界面,以免軟體運行異常退出。
3 主要數據結構
結構體Air:
包含AirLine, Number, Date, Plane, Company (與航線的關系)以及Air類型的指針(用於鏈表操作)等成員變數。
4 具體技術
1. 指針、結構體的應用
2. 單向鏈表的建立,插入,添加及刪除等
3. 文件的讀寫
4. 簡單演算法:如排序演算法等
5 測試要求
1、要求准備至少有10條記錄的文件(flight.txt),便於進行上機測試;
2、對空鏈表、沒有記錄或沒有文件等情況進行處理的驗證;文件操作是否正確的驗證;對記錄進行操作的相關測試等;
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
1 題目背景
理財從記賬開始。個人記賬系統要求用C語言實現收入、支出信息的記錄,包括收入支出行為的時間,涉及的幣種、幣值,所屬的門類,比如收入的父母贊助、學校補助以及個人勞動所得,支出的衣、食、行、娛樂等;而且可以根據所記錄的信息進行統計,例如余額、總收入與總支出,月度開銷,各項門類的比例等。具體的要求如下。
2 程序功能
本程序利用單鏈表存儲結構完成對個人收支信息的動態管理,要求實現如下的基本功能。
1)菜單操作
在屏幕上顯示菜單,通過輸入0-X之間的數字調用相應的功能函數。
2)創建鏈表
即輸入收支信息,按照提示信息輸入序號、時間、收或支、金額、門類、余額等。注意:申請內存空間,驗證輸入數據是否符合要求,設置輸入結束標志。
3)顯示鏈表
顯示當前鏈表中的所有記錄。注意輸出格式的直觀。
4) 插入記錄
插入記錄需要輸入插入位置和新記錄信息。輸入某個記錄的序號,新結點將插入在這個指定記錄之前。
5) 刪除記錄
刪除指定時間或序號的記錄。注意刪除記錄要釋放該記錄佔用的內存空間。
6)查詢記錄
按序號或門類查找並顯示記錄。(可擴展為按照多種方式查找)
7)更新記錄
修改已存在記錄的分量信息。
8) 保存文件
將收支信息保存到指定文件(waccount.txt)中。
9) 讀取記錄
從指定的文件(raccount.txt)中讀入所有記錄。
10)排序
根據時間、金額或者門類進行排序。
11)統計
統計各類別的收入或者支出數額,並保存到文件total.txt中。
12)退出
結束軟體操作,釋放內存後退出。
3 數據結構
將一次收支行為信息作為一個結構體類型的結點,其中至少含有下列類型的信息:序號、時間、大類別(收入或支出)、涉及幣種、涉及幣值、具體門類、當時余額,以及指向後續結點的指針等。
4 具體技術
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
1 題目背景
某大型運動會需要一個管理系統對所有參與的運動員及其成績進行統一管理,本題目要求用C語言設計一個運動會管理系統,能夠增加、刪除運動員和修改運動員成績,並實現各種統計功能。
2 程序功能
本程序利用單鏈表存儲結構完成對運動員的動態管理,要求實現如下的基本功能。
1)菜單操作
在屏幕上顯示菜單,通過輸入0-X之間的數字調用相應的功能函數。
2)創建鏈表
即輸入運動員信息,按照提示信息輸入運動員編號、姓名、代表團、參加項目等。注意:一個運動員參加多個項目者需要有多條記錄。
3) 顯示鏈表
顯示當前鏈表中的所有記錄。注意輸出格式。
4) 刪除記錄
刪除指定序號的記錄。注意同時釋放內存空間。
5) 查詢運動員項目或成績
按姓名查找並顯示該記錄。(可擴展為按照姓名和編號兩種方式查找)
6)插入記錄
插入記錄需要輸入插入位置和新記錄信息。輸入某個記錄的運動員編號,新結點將插入在這個指定記錄之前。
7)更新記錄
如:在已有列表中修改運動員成績信息。
8) 保存文件
將運動員信息保存到指定文件(Athletes.txt)中。
9) 讀取記錄
從指定的文件(Athletes.txt)中讀入所有記錄。
10)計算
每個項目的前8名計算成績,第一名10分,第二名8分,第三名7分,第四名至第八名分別獲得5~1分,計算各代表團積分。
11)統計
生成獎牌榜、總積分榜(以代表團為單位)等,生成某一個項目的參賽人員名單。
12)退出
結束軟體操作,釋放內存後退出。注意進行退出操作以前需要重新寫文件。
3 數據結構
將一個運動員參加一個項目的相關信息當作一個結點,這個結點的類型為結構體,其中至少含有下列類型的信息:編號、運動員編號、姓名、參加項目、所屬代表團、項目名次、以及指向後面結點的指針等。
4 功能擴展
一般的實現方法是一個(對、隊)運動員每參加一個項目就增加一條記錄,鼓勵其他實現方式,如每一個運動員對應一條記錄,他參加的每一個項目及成績用其他方法存儲。同時鼓勵其他創意的和具有實用性的擴展功能。
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
1 功能描述
設計一個公司職工工資管理系統,有新建、顯示、插入、刪除、查詢和計算實發工資、按實發工資排序等功能。
2 具體設計要求
職工信息應包括:職工號、姓名、性別、職稱、職務工資、獎金、水電費、保險費、實發工資等,注意:職工號不能重復;實發工資=職務工資+獎金-水電費-保險費。
程序運行後,首先顯示主菜單,要求當用戶輸入任意一個序號後,程序都能進行相應操作。
當選擇顯示功能時,用戶可以選擇按某種排序形式顯示,如按職工號或姓名的順序、工資總額的順序、職務工資或獎金的順序。
當選擇查詢功能時,用戶可以按某種方式查詢,如按職工號或姓名查詢、按職稱查詢等;用戶也可以查詢某一范圍內的數據,如工資總額小於2000元的職工的數據,介於1000~2000元的職工的數據等,根據具體要求列出菜單供用戶選擇。
當選擇修改或刪除功能時,可以根據職工號或姓名修改、刪除數據,在修改、刪除時先要求用戶確認,確認後再進行操作。
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
1 功能描述
設計一個圖書信息管理系統,使之具有新建圖書信息、顯示、插入、刪除、查詢和排序等功能。
2 具體設計要求
圖書信息包括:圖書編號、書名、作者名、出版單位、出版時間、價格等。
系統以菜單方式工作:
① 圖書信息錄入(要求圖書信息用文件保存)
② 圖書信息瀏覽
③ 插入圖書信息
④ 查詢(可以有多種查詢方式,如按書名查詢、按作者名查詢、按價格查詢等);
⑤ 排序(可以按圖書編號排序、按書名排序、按出版時間排序、按價格排序等);
⑥ 修改圖書信息
⑦ 刪除圖書信息
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
職工信息包括職工號、姓名、性別、年齡、學歷、職稱、工資、住址、電話等(職工號不能重復)。試設計一職工信息管理系統,使之至少能提供以下功能:
職工信息錄入功能(職工信息用文件保存,當系統退出時,要自動保存職工的基本信息;當職工的信息發生變化後,文件中的信息也要動態發生改變。)
職工信息瀏覽功能
查詢及排序功能:
按職工號查詢、排序
按工資查詢、排序
按職稱查詢、排序……等等
職工信息刪除、修改功能
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
假定民航機場共有n個航班,每個航班有一個航班號、確定的航線(起始站、終點站)、確定的飛行時間(星期幾)和一定的乘客訂票額。試設計一個民航訂票系統,使之能提供下列服務:
航班信息錄入功能(航班信息用文件保存)
航班信息瀏覽功能
查詢航線:
按航班號查詢
按終點站查詢……等等
排序功能
承辦訂票和退票業務
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
假定有n門課程,每門課程有課程編號,課程名稱,課程性質,總學時,每周學時,實驗學時,學分,開課學期,人數限制,面向專業,面向年級等信息,學生可按要求(如總學分不得少於60)自由選課。試設計一個學生選課系統,使之能提供以下功能:
課程信息錄入功能(課程信息用文件保存)
課程信息瀏覽功能
查詢功能:
按學分查詢
按課程性質查詢……等等
排序功能
學生基本信息的管理功能
學生選修課程功能
具有選擇某門課程功能、退選某門課程功能;
按照課程瀏覽選課學生名單功能、按照學生姓名和學號查詢某人的選修課程情況功能、根據選修課程的選修條件自動排除不滿足條件的選修請求功能;
輸出某門選修課的選修名單到文件功能;
輸出某人的選修課情況到文件功能;
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
設計一個小型超市商品銷售管理系統,實現功能:根據銷售信息(包含:商品編號、銷售數量、銷售單價、銷售日期、銷售人員,保存為磁碟文件),實現對商品日常信息的管理。
1、日用商品銷售信息輸入
運用人機對話方式實現商品的商品編號、銷售數量、銷售單價、銷售日期、銷售人員的信息錄入,以文件的形式保存其信息
2、商品銷售信息查詢:
a) 根據商品編號查詢所售商品明細(數量,單價,金額)
b) 根據銷售日期查詢當天所售商品明細(數量,單價,金額)
c) 根據銷售人員查詢某營業員所售商品明細(數量,單價,金額)
3、商品銷售信息統計
a) 日銷售額統計(按商品編號,銷售人員,全部商品)及總銷售額統計
b) 月銷售額(按商品編號,銷售人員,全部商品)及總銷售額統計
c) 月度銷售排名(按商品編號,銷售人員)
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
必做題:
歌星評分系統
(1)功能描述
12名評委給14名歌星評分。請編寫一程序計算歌星的得分和名次以及評委的得分和名次,規則如下:
1)歌星得分:去掉一個最高分及一個最低分,剩下10個的平均分為該歌星得分。
2)評委得分:即評委對14名歌星的評分偏差總和。(偏差定義為該評委對某歌星的評分減去歌星得分的絕對值。)
3)名次:歌星得分越高排名越前,評委得分越低排名越前。
(2)具體設計要求
要求輸出格式如下:
各評委給各歌星的評分放在數據文件「music. txt」中,存放形式為二維數組:
行——為各評委給某歌星的評分;列——為某評委給各歌星的評分。
要求本程序中的數據必須從數據文件「music. txt」中讀取,學會對文件進行簡單的操作。
(提示:顯然數據文件為14行12列,自己可定義一個二維數組:15行13列,除存放讀入數據外,可分別用第13列和第15行存放歌星得分與評委得分。)
鏈接: https://pan..com/s/1mq8kqN3BvK0IvZBEUP9Oag?pwd=1111
提取碼: 1111
❷ c語言實現設計一個學生成績管理系統課程
參考代碼如下,不過還是建議自己寫一寫比較好:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student //結構體
{
char name[20]; //姓名
char number[20]; //學號
double math; //數學
double english; //英語
double chinese; //語文
double program; //程序
}s[50];
void head() //界面
{
printf(
"**********************************************************************\n"
"** **\n"
"** **\n"
"** 學生成績管理系統 **\n"
"** **\n"
"** 1.信息錄入 **\n"
"** 2.信息統計 **\n"
"** 3.信息瀏覽 **\n"
"** 4.信息查詢 **\n"
"** 5.信息排序 **\n"
"** 6.信息刪除 **\n"
"** 0.退出系統 **\n"
"** **\n"
"**********************************************************************\n"
);
}
void ru(struct student s[], int* n) //文件導入函數
{
FILE *p;
int i=*n;
if((p=fopen("數據.txt", "r"))==NULL)
{
n=n;
}
else
{
while(!feof(p))
{
fscanf(p, "%s%s%lf%lf%lf%lf\n", s[i].name, s[i].number, &s[i].math, &s[i].english, &s[i].chinese, &s[i].program);
i++;
*n=*n+1;
}
}
fclose(p);
}
void chu(struct student s[], int n)
{
FILE *p;
int i=0;
if((p=fopen("數據.txt", "w"))==NULL)
{
printf("無法打開此文件!");
}
else
{
while(i<n-1)
{
fprintf(p, "%s %s %lf %lf %lf %lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
i++;
}
fprintf(p, "%s %s %lf %lf %lf %lf", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
fclose(p);
}
void dayin(struct student s[], int n) //顯示所有信息
{
int i;
double all=0.0;
printf("\n姓名\t\t學號\t\t數學\t英語\t語文\t程序\t總分\n");
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program, all);
}
}
void shuru(struct student s[], int* n) //信息輸入函數
{
int i=*n, j, k, m;
printf("請輸入學生姓名:");
scanf("%s", s[i].name);
printf("請輸入學生學號:");
for (j=0; ; j++)
{
m=0;
scanf("%s", s[i].number);
for (k=0; k<i; k++)
{
if (strcmp(s[i].number, s[k].number)==0)
{
m=m+1;
printf("學號重復,請重新輸入學號:");
break;
}
}
if (m==0)
{
break;
}
}
printf("請輸入數學成績:");
scanf("%lf", &s[i].math);
printf("請輸入英語成績:");
scanf("%lf", &s[i].english);
printf("請輸入語文成績:");
scanf("%lf", &s[i].chinese);
printf("請輸入程序成績:") ;
scanf("%lf", &s[i].program);
printf("添加信息成功!\n");
*n=*n+1;
chu(s, *n);
}
void paixu(struct student s[], int n) //排序函數
{
int i, j;
double all1, all2;
struct student stu;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
all1=s[i].math+s[i].english+s[i].chinese+s[i].program;
all2=s[j].math+s[j].english+s[j].chinese+s[j].program;
if (all1<all2)
{
stu=s[i];
s[i]=s[j];
s[j]=stu;
}
}
}
printf("排序後的數據:\n");
dayin(s, n);
}
void chazhao(struct student s[], int n) //查找函數
{
char name[20], num[20];
int m1, m2=0, i, j;
printf("1.按姓名查找\n2.按學號查找\n選擇查詢方式(1或2):");
scanf("%d", &m1);
if (m1==1)
{
printf("請輸入您要查找的學生姓名:");
scanf("%s", name);
for (i=0; i<n; i++)
{
if (strcmp(s[i].name, name)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t學號\t數學\t英語\t語文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("沒有此學生信息!\n");
}
}
else if (m1==2)
{
printf("請輸入您要查找的學生學號:");
scanf("%s", num);
j=0;
for (i=0; i<n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t學號\t數學\t英語\t語文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("沒有此學生信息!\n");
}
}
}
void shanchu(struct student s[], int* n) //刪除函數
{
char num[20];
int m=0, i, j;
printf("請輸入您要刪除的學生學號:");
scanf("%s", num);
for (i=0; i<=*n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m=m+1;
for (j=i; j<*n; j++)
{
s[j]=s[j+1];
}
*n=*n-1;
}
}
if (m==0)
{
printf("沒有此學生信息!\n");
}
else
{
chu(s, *n);
printf("刪除完畢!\n");
}
}
void allAndAver(struct student s[], int n)
{
int i ;
double all=0.0, aver=0.0;
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
aver=all/4;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\n", s[i].name, s[i].number, all, aver);
}
}
void Fail(struct student s[], int n) //統計單科不及格人數
{
int i, fail[4]={0};
for (i=0; i<n; i++)
{
if (s[i].math<60)
{
fail[0]++;
}
if (s[i].english<60)
{
fail[1]++;
}
if (s[i].chinese<60)
{
fail[2]++;
}
if (s[i].program<60)
{
fail[3]++;
}
}
printf("\n不及格信息:\n");
printf("數學不及格的人數為:%d人\n", fail[0]);
printf("英語不及格的人數為:%d人\n", fail[1]);
printf("語文不及格的人數為:%d人\n", fail[2]);
printf("程序不及格的人數為:%d人\n", fail[3]);
}
void Max(struct student s[], int n) //統計單科最高分人數
{
int i, counter[4]={0};
double max[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math>max[0])
{
max[0]=s[i].math;
}
if (s[i].math>max[1])
{
max[1]=s[i].math;
}
if (s[i].math>max[2])
{
max[2]=s[i].math;
}
if (s[i].math>max[3])
{
max[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==max[0])
{
counter[0]++;
}
if (s[i].math==max[1])
{
counter[1]++;
}
if (s[i].math==max[2])
{
counter[2]++;
}
if (s[i].math==max[3])
{
counter[3]++;
}
}
printf("\n最高分信息:\n");
printf("數學最高分為:%.1lf, 人數為:%d人\n", max[0], counter[0]);
printf("英語最高分為:%.1lf, 人數為:%d人\n", max[1], counter[1]);
printf("語文最高分為:%.1lf, 人數為:%d人\n", max[2], counter[2]);
printf("程序最高分為:%.1lf, 人數為:%d人\n", max[3], counter[3]);
}
void Min(struct student s[], int n) //統計單科最低分人數
{
int i, counter[4]={0};
double min[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math<min[0])
{
min[0]=s[i].math;
}
if (s[i].math<min[1])
{
min[1]=s[i].math;
}
if (s[i].math<min[2])
{
min[2]=s[i].math;
}
if (s[i].math<min[3])
{
min[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==min[0])
{
counter[0]++;
}
if (s[i].math==min[1])
{
counter[1]++;
}
if (s[i].math==min[2])
{
counter[2]++;
}
if (s[i].math==min[3])
{
counter[3]++;
}
}
printf("\n最低分信息:\n");
printf("數學最低分為:%.1lf, 人數為:%d人\n", min[0], counter[0]);
printf("英語最低分為:%.1lf, 人數為:%d人\n", min[1], counter[1]);
printf("語文最低分為:%.1lf, 人數為:%d人\n", min[2], counter[2]);
printf("程序最低分為:%.1lf, 人數為:%d人\n", min[3], counter[3]);
}
void tongji(struct student s[], int n) //統計函數
{
printf("統計信息如下:\n");
printf("\n姓名\t\t學號\t\t總分\t平均分\n");
allAndAver(s, n);
Max(s, n);
Min(s, n) ;
Fail(s, n);
}
int main() //主函數
{
int k, n=0;
ru(s, &n);
chu(s, n);
while (1)
{
head();
printf("\n請按對應的鍵選擇相應的功能:");
scanf("%d",&k);
switch (k)
{
case 1:
shuru(s, &n);
break;
case 2:
tongji(s, n);
break;
case 3:
dayin(s, n);
break;
case 4:
chazhao(s, n);
break;
case 5:
paixu(s, n);
break;
case 6:
shanchu(s, &n);
break;
case 0:
exit(1);
break;
default : printf("請輸入正確的命令!\n");
}
system("pause");
system("cls");
}
return 0;
}
❸ C語言課程設計 題目11:基於結構體數組的學生成績管理系統
#include /*引用庫函數*/
#include
#include
#include
typedef struct /*定義結構體數組*/
{
char num[10]; /*學號*/
char name[20]; /*姓名*/
int score; /*成績*/
}Student;
Student stu[80]; /*結構體數組變數*/
int menu_select() /*菜單函數*/
{
char c;
do{
system("cls"); /*運行前清屏*/
printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/
printf("\t\t | 1. Input Records |\n");
printf("\t\t | 2. Display All Records |\n");
printf("\t\t | 3. Sort |\n");
printf("\t\t | 4. Insert a Record |\n");
printf("\t\t | 5. Delete a Record |\n");
printf("\t\t | 6. Query |\n");
printf("\t\t | 7. Statistic |\n");
printf("\t\t | 8. Add Records from a Text File|\n");
printf("\t\t | 9. Write to a Text file |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t*****************************************\n");
printf("\t\t\tGive your Choice(0-9):");
c=getchar(); /*讀入選擇*/
}while(c'9');
return(c-'0'); /*返回選擇*/
}
int Input(Student stud[],int n) /*輸入若干條記錄*/
{int i=0; char sign,x[10]; /*x[10]為清除多餘的數據所用*/ while(sign!='n'&&sign!='N') /*判斷*/ { printf("\t\t\tstudent's num:"); /*交互輸入*/ scanf("\t\t\t%s",stud[n+i].num); printf("\t\t\tstudent's name:"); scanf("\t\t\t%s",stud[n+i].name); printf("\t\t\tstudent's score:"); scanf("\t\t\t%d",&stud[n+i].score); gets(x); /*清除多餘的輸入*/ printf("\t\t\tany more records?(Y/N)"); scanf("\t\t\t%c",&sign); /*輸入判斷*/ i++; }
return(n+i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式頭*/
printf("\t\t\tnumber name score\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循環輸入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十個暫停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/ printf("\t\t\t"); system("pause"); printf("\t\t\t-----------------------------------\n"); }
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=&stud[j+1].score; q=&stud[j].score; s=*p; *p=*q; *q=s; }
}
int Insert_a_record(Student stud[],int n) /*插入一條記錄*/
{char x[10]; /*清除多餘輸入所用*/ printf("\t\t\tstudent's num:"); /*互動式輸入*/ scanf("\t\t\t%s",stud[n].num); printf("\t\t\tstudent's name:"); scanf("\t\t\t%s",stud[n].name); printf("\t\t\tstudent's score:"); scanf("\t\t\t%d",&stud[n].score); gets(x); n++; Sort_by_num(stud,n); /*調用排序函數*/ printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/ return(n); }
int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/
{ char s[20];
int i=0,j;
printf("\t\t\ttell me his(her) name:"); /*互動式問尋*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*返回失敗信息*/
return(n);
}
for(j=i;j<n-1;j++) /*刪除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/
{ char s[20];
int i=0;
printf("\t\t\tinput his(her) name:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學生信息*/
printf("\t\t\this(her) score:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成績平均值*/
for(i=0;i<n;i++) /*循環輸入判斷*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\tthere are %d records.\n",n); /*總共記錄數*/
printf("\t\t\tthe hignest score:\n"); /*最高分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\tthe lowest score:\n"); /*最低分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
}
int AddfromText(Student stud[],int n) /*從文件中讀入數據*/
{ int i=0,num;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*輸入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/
{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*讀入總記錄量*/
while(i<num) /*循環讀入數據*/
{
fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
i++;
}
n+=num;
fclose(fp); /*關閉文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/
{
int i=0;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打開文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循環寫入數據*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
i++;
}
fclose(fp); /*關閉文件*/
printf("Successed!\n"); /*返回成功信息*/
}
void main() /*主函數*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*選擇判斷*/
{
case 1:
printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); /*按學號排序*/
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); /*插入一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); /*查找並顯示一個記錄*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\tStatistic\n");
Statistic(stu,n); /*新增功能,輸出統計信息*/
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tAdd Records from a Text File\n");
n=AddfromText(stu,n); /*新增功能,輸出統計信息*/
break;
case 9:
printf("\t\t\tWrite to a Text file\n");
WritetoText(stu,n); /*循環寫入數據*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}
❹ c語言程序設計實例 選題二:學生成績管理系統設計 學生成績信息包括:學號,姓名,三門課程成績(數學、英
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int INDEX[32];
//結構體變數
struct STUDENT{
int id;
int age;
int chinese,math,english;
char name[21];
}students[32];
void page_title(char *menu_item){
printf(">>> 學 生 管 理 系 統 <<<\n\n- %s -\n\n",menu_item);
}
void return_confirm(void){
printf("\n按任意鍵返回……\n");
getch();
}
void student_new(void){
int n;
page_title("錄入學生基本信息");
for(n=0;n<32;n++)
if(students[n].id==0) break;
printf("學號:");
scanf("%d",&students[n].id);
printf("姓名:");
scanf("%s",&students[n].name);
printf("年齡:");
scanf("%d",&students[n].age);
return_confirm();
}
int search_id(void){
int n,i;
printf("請輸入學生學號:");
scanf("%d",&i);
for(n=0;n<32;n++)
{
if(students[n].id==i&&students[n].id!=0)
{
printf("學號:%d\n",students[n].id);
printf("姓名:%s\n",students[n].name);
printf("年齡:%d\n",students[n].age);
return n;
}
}
printf("\n輸入錯誤或學號不存在.\n");
return -1;
}
void student_del(void){
int n;
page_title("注銷學生基本信息");
if((n=search_id())!=-1) students[n].id=0;
printf("\n!該學生已注銷.\n");
return_confirm();
}
void student_edit(void){
int n;
page_title("編輯學生基本信息");
if((n=search_id())!=-1)
{
printf("\n請重新輸入新信息:\n學號:");
scanf("%d",&students[n].id);
printf("姓名:");
scanf("%s",&students[n].name);
printf("年齡:");
scanf("%d",&students[n].age);
}
return_confirm();
}
void score_input(void){
int s,n,t;
page_title("錄入成績");
printf("\n請用數字鍵選擇科目\n1-語文 2-數學 3-英語\n");
scanf("%d",&s);
for(n=0;n<32;n++)
{
if(students[n].id!=0)
{
printf("學號:%d 姓名:%s 成績:",students[n].id,students[n].name);
scanf("%d",&t);
switch(s)
{
case 1 : students[n].chinese=t;break;
case 2 : students[n].math=t;break;
case 3 : students[n].english=t;break;
}
}
}
return_confirm();
}
void score_edit(void){
int n;
page_title("修改成績");
if((n=search_id())!=-1)
{
printf("語文:%d 數學:%d 英語:%d\n",students[n].chinese,students[n].math,students[n].english);
printf("\n請重新輸入成績:\n語文:");
scanf("%d",&students[n].chinese);
printf("數學:");
scanf("%s",&students[n].math);
printf("英語:");
scanf("%d",&students[n].english);
}
return_confirm();
}
void sort_it(char nn){
int n,m,p,x,t[32];
for(n=0;n<32;n++)
{
switch(nn)
{
case '1' : t[n]=students[n].id;break;
case '2' : t[n]=students[n].chinese;break;
case '3' : t[n]=students[n].math;break;
case '4' : t[n]=students[n].english;break;
case '5' : t[n]=students[n].chinese+students[n].math+students[n].english;break;
}
}
for(n=0;n<32;n++)
{
x=0;
p=-1;
for(m=0;m<32;m++)
{
if(t[m]>x)
{
x=t[m];
p=m;
}
}
t[p]=-1;
INDEX[n]=p;
}
}
void browser(void){
int n,x;
char k;
sort_it('1');
while(1)
{
page_title("瀏覽");
printf("按數字鍵選擇排序方式或按 0 返回\n");
printf("學號-1\t姓名\t年齡\t語文-2\t數學-3\t英語-4\t總分-5\n");
for(n=0;n<32;n++)
{
if(INDEX[n]!=-1)
{
x=INDEX[n];
printf("%d\t%s\t",students[x].id,students[x].name);
printf("%d\t%d\t",students[x].age,students[x].chinese);
printf("%d\t%d\t",students[x].math,students[x].english);
printf("%d\n",students[x].chinese+students[x].math+students[x].english);
}
}
k=getch();
if(k<'6'&&k>'0') sort_it(k);
else if(k=='0') break;
else continue;
}
}
void main(void){
menu: page_title("操作選單");
printf("請用數字鍵選擇操作\n\n");
printf("1 錄入學生基本信息\n2 修改學生基本信息\n");
printf("3 注銷學生基本信息\n\n4 錄入成績\n5 修改成績\n\n");
printf("6 瀏覽...\n \n0 退出\n");
switch(getch())
{
case '1' : student_new();break;
case '2' : student_edit();break;
case '3' : student_del();break;
case '4' : score_input();break;
case '5' : score_edit();break;
case '6' : browser();break;
case '0' : exit(0);
}
goto menu;
}
看看符合不符合?C++版的要嗎?
❺ c語言程序設計題目 :機房收費管理系統
機器使用情況你可以理解為那些機器已經有人在用了。如果你的程序機器有編號的話,你可以再給每台機器加一個變數記錄有沒有人在用,有同學進去就標志為有在用,學生出來則標記為無人在用,這樣要顯示使用情況只要分機器有在用和無人在用顯示一下就行了。
或者不設標記,但要記錄沒個學生用的是哪台機器,要輸出時為每一台機器搜索是否有學生在用就可以了,不過效率不如第一種。無法預測你用的數據結構,故無法給你代碼,自己寫吧,很簡單。
比如第一種,你可以用如下數據結構:
struct computer {
int no;
boo is_using;
} com[50];
假設機房有50台機子。
只要在登記學生的函數中順便處理一下用的哪台機子就行了。
另外,虛機團上產品團購,超級便宜
❻ 用C語言編寫一個學生管理系統。
概述
單純只用多個數組管理學生成績信息,不使用結構體,該程序最主要的難點是依據學號或總成績對學生信息進行排序,藉助了臨時數組來標記排好序的下標。
運行結果如下:
輸入數據:
貼上代碼(有點多)
#include <stdio.h>
#include <stdlib.h> //exit函數頭文件
#include <string.h> //字元串相關操作頭文件
#define MAX_STUDENT 30 //最大學生數
//函數聲明,本程序共10個子函數,每個函數對應一個操作
void student_scanf(int n);
void student_printf(int n);
int student_find_name(int n);
int student_find_num(int n);
void student_sort_num(int n);
void student_sort_sum(int n);
int student_alter_num(int n);
int student_alter_name(int n);
int student_delete_num(int n);
int student_delete_name(int n);
//全局數組變數,用於存儲學生信息
char names[MAX_STUDENT][50];
int math[MAX_STUDENT];
int english[MAX_STUDENT];
int computer[MAX_STUDENT];
int sum[MAX_STUDENT];
int num[MAX_STUDENT];
//以下變數用於學生信息數組排序,作為臨時數組
int temp_num[MAX_STUDENT];
char temp_names[MAX_STUDENT][50];
int temp_math[MAX_STUDENT];
int temp_english[MAX_STUDENT];
int temp_computer[MAX_STUDENT];
int temp_sum[MAX_STUDENT];
//sort數組存儲排好序的學號或姓名下標
int sort[MAX_STUDENT];
//循環全局變數
int i, j;
//main主函數
int main(void)
{
int choice,n;
while (1)
{
printf("************************************* ");
printf("歡迎使用學生成績管理系統 ");
printf("[1] 輸入所有學生信息 ");
printf("[2] 輸出所有學生成績 ");
printf("[3] 按學號查找某個學生信息 ");
printf("[4] 按姓名查找某個學生信息 ");
printf("[5] 按學號對學生排序 ");
printf("[6] 按總成績對學生排序 ");
printf("[7] 按學號修改某個學生信息 ");
printf("[8] 按姓名修改某個學生信息 ");
printf("[9] 按學號刪除某個學生信息 ");
printf("[10] 按姓名刪除某個學生信息 ");
printf("[0] 退出程序 ");
printf("請輸入您的選擇(0 - 9):");
scanf("%d",&choice);
printf("**************************************) ");
switch (choice)
{
case 1://錄入;
printf("請輸入錄入的學生信息數: ");
scanf("%d",&n);
student_scanf(n);
break;
case 2://輸出;
student_printf(n);
break;
case 3://根據學號查找
student_find_num(n);
break;
case 4://根據姓名查找
student_find_name(n);
break;
case 5://按學號排序
student_sort_num(n);
break;
case 6://按姓名排序
student_sort_sum(n);
break;
case 7://按學號修改
student_alter_num(n);
break;
case 8://按姓名修改
student_alter_name(n);
break;
case 9://按學號刪除
student_delete_num(n);
n--;
break;
case 10://按姓名刪除
student_delete_name(n);
n--;
break;
case 0://退出程序
printf("退出程序 ");
printf("程序結束,謝謝使用! ");
exit(0);
default:
printf("您輸入的菜單有誤。請重新輸入! ");
}
}
return 0;
}
//1.輸入信息
void student_scanf(int n)
{
for (i = 0; i<n; ++i)
{
printf(" 請輸入第%d個學生的信息: ", i + 1);
printf(" 學號:");
scanf("%d", &num[i]);
printf(" 姓名:");
scanf("%s", names[i]);
printf(" 數學成績:");
scanf("%d", &math[i]);
printf(" 英語成績:");
scanf("%d", &english[i]);
printf(" 計算機成績:");
scanf("%d", &computer[i]);
//計算總成績
sum[i] = math[i] + english[i] + computer[i];
}
}
//2.列印信息
void student_printf(int n)
{
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
printf("---------------------------------------------------------- ");
for (i = 0; i<n; ++i)
{
printf("%d %s %d %d %d %d ", num[i], names[i], math[i], english[i], computer[i], sum[i]);
}
printf("------------------------------------------------------- ");
}
//3.按學號查找
int student_find_num(int n)
{
int nums;
int result;
printf("請輸入待查找的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else
{
//先列印表頭
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
//再列印數據
printf("%d %s %d %d %d %d ", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("列印出查找結果! ");
}
return 1;
}
//4.用姓名查找成績
int student_find_name(int n)
{
char name[200];
int result;
printf("請輸入待查找的學生姓名:");
scanf("%s", name);
result = -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name, names[i]) == 0)
{
result = i;
break;
}
}
if (result == -1)
{//未找到結果
printf("沒有該學生信息! ");
return 0;
}
else//找到結果
{
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
printf("%d %s %d %d %d %d ", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("已完成查找! ");
}
return 1;
}
//5.按學號排序
void student_sort_num(int n)
{
int min,max;
for(i=0; i<n; ++i) //復制臨時數組
{
temp_num[i] = num[i];
}
max = 0; //查找學號最大值,將其下標存至sort數組的最後一個值中
for(j=1; j<n; j++)
{
if(temp_num[max]<temp_num[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; i<n-1; ++i)
{
min = i; //查找學號最小值
for(j=0; j<n; ++j)
{
if(temp_num[min]>temp_num[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_num[min] = temp_num[max]; //利用臨時數組將查找過的學生信息的學號設為最大值,排除查找干擾
}
for(i=0; i<n; ++i) //再復制一次臨時數組
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下標對原數組進行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完畢,請按菜單鍵2查看排序結果! ");
return ;
}
//6.按總成績排序
void student_sort_sum(int n)
{
int min,max;
for(i=0; i<n; ++i) //復制臨時數組
{
temp_sum[i] = sum[i];
}
max = 0; //查找總成績最大值,將其下標存至sort數組的最後一個值中
for(j=1; j<n; j++)
{
if(temp_sum[max]<temp_sum[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; i<n-1; ++i)
{
min = i; //查找總成績最小值
for(j=0; j<n; ++j)
{
if(temp_sum[min]>temp_sum[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用臨時數組將查找過的學生信息的總成績設為最大值,排除查找干擾
}
for(i=0; i<n; ++i) //再復制一次臨時數組
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下標對原數組進行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完畢,請按菜單鍵2查看排序結果! ");
return ;
}
//7.按學號修改學生信息
int student_alter_num(int n)
{
int nums;
int result;
printf("請輸入待修改的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //修改信息值
{
printf("請重新輸入該學生信息: ");
printf("學號: ");
scanf("%d",&num[result]);
printf("姓名: ");
scanf("%s",names[result]);
printf("數學成績: ");
scanf("%d",&math[result]);
printf("英語成績: ");
scanf("%d",&english[result]);
printf("計算機成績: ");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//8.按姓名修改學生信息
int student_alter_name(int n)
{
char name[50];
int result;
printf("請輸入待修改的學生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //修改信息值
{
printf("請重新輸入該學生信息: ");
printf("學號: ");
scanf("%d",&num[result]);
printf("姓名: ");
scanf("%s",names[result]);
printf("數學成績: ");
scanf("%d",&math[result]);
printf("英語成績: ");
scanf("%d",&english[result]);
printf("計算機成績: ");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//9.按學號刪除學生信息
int student_delete_num(int n)
{
int nums;
int result;
printf("請輸入待刪除的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; i<n-1; ++i) //最後在main函數中,要將n的值減1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
//10.按姓名刪除學生信息
int student_delete_name(int n)
{
char name[50];
int result;
printf("請輸入待刪除的學生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; i<n-1; ++i) //最後在main函數中,要將n的值減1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
❼ C語言程序設計--班級檔案管理系統
給,已經編譯運行確認了:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 10
int M=0;
struct student
{
char num[13];
char name[20];
char sex;
char address[30];
int age;
};
typedef struct LB
{
struct student XINXI;
struct LB *next;
}LB_1,*LB_2;
void CAIDANG()
{
printf(" \t \t \t (歡迎使用本班級檔案管理系統)\t\t\t\t\n");
printf("★*★*★*★*★*★*★*★*★*★ 歡迎進入我們的系統 ★*★*★*★*★*★*★*★*★*★\n\n");
printf("1.錄入學生資料\t\t\t\t\t4.查詢學生信息\n\n");
printf("2.修改學生信息\t\t\t\t\t5.刪除學生信息\n\n");
printf("3.保存學生信息\t\t\t\t\t0.退出檔案系統\n\n");
printf(" \n");
printf("★*★*★*★*★*★*★*★*★*★ 歡迎進入本系統 ★*★*★*★*★*★*★*★*★*★\n");
}
/*文本顏色*/
void color()
{
textbackground(8);
textcolor(9);
clrscr();
}
void Wrong()
{
printf("\n對不起您的輸入錯誤!\n");
}
void SORRY()
{
printf("\n對不起該同學現沒有任何信息!\n");
}
void printe(LB_1 *p)/* 本函數用於輸出英文 */
{
printf(" %-2s %s\t %s\t%s\t %d\t \n",p->XINXI.num,p->XINXI.name,p->XINXI.sex,p->XINXI.address,p->XINXI.age);
}
/* 該函數用於定位鏈表中符合要求的接點,並返回該指針 */
LB_1 *Locate(LB_2 l,char findmess[],char nameornum[])
{
LB_1 *r;
if(strcmp(nameornum,"num")==0) /* 按學號查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->XINXI.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->XINXI.name,findmess)==0)
return r;
r=r->next;
}
} return 0;
}
/*以下是增加學生信息的函數*/
void TIANJIA(LB_2 l)
{
LB_1 *p,*r,*s;
char num[13];
r=l; s=l->next;
while(r->next!=NULL) /*些處循環一直到最後*/
r=r->next;
while(1)
{
printf(" 請輸入添加的學生學號(輸入'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->XINXI.num,num)==0)
{
printf("(必看提示):學號為'%s'的學生已有信息,若要修改請你輸入'2 修改'!\n",num);
printe(s);
printf("\n");
return;
}
s=s->next;
} p=(LB_1 *)malloc(sizeof(LB_1));
strcpy(p->XINXI.num,num);
printf(" 請你輸入學號:");
scanf("%s",p->XINXI.num);
getchar();
printf(" 請你輸入姓名:");
scanf("%s",p->XINXI.name);
getchar();
printf(" 請你輸入性別:");
scanf("%s",p->XINXI.sex);
getchar();
printf(" 請你輸入地址:");
scanf("%s",p->XINXI.address);
getchar();
printf(" 請你輸入年齡:");
scanf("%d",&p->XINXI.age);
getchar();
/* 下面是把指針變數轉到鏈表的下一個結點中以便循環的時候使用 */
p->next=NULL;
r->next=p;
r=p; M=1;
}
}
/*以下是刪除學生信息的函數*/
void SHANCHU(LB_2 l)
{
int sel;
LB_1 *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n******(必看提示):對不起,現文件中沒有信息:所以您不能查詢!\n");
return;
}
printf("\n <必看提示> <以學號刪除請輸入1\n> <以姓名刪除請輸入2\n> PLEASE:");
scanf("%d",&sel);
if(sel==1)
{
printf("請輸入要刪除的學生的學號PLEASE:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{ r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n*******(必看提示):該學生的信息已完全刪除成功!\n");
M=1;
}
else
SORRY();
}
else if(sel==2)
{
printf("請輸入要刪除的學生的姓名PLEASE:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{ r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n******(必看提示):該學生信息已成功刪除!\n");
M=1;
}
else
SORRY();
}
else
Wrong();
}
/*以下是查詢學生信息*/
void CHAXIONG(LB_2 l)
{ int sel;
char findmess[20];
LB_1 *p;
if(!l->next)
{ printf("\n******(必看提示):對不起,現文件中沒有信息:所以您不能查詢!\n");
return;
}
printf("\n以學號查詢請輸入1:\n以姓名查詢請輸入2:\n以性別查詢請輸入3:\n以性別查詢請輸入4:\n PLEASE:");
scanf("%d",&sel);
if(sel==1)/*輸入學號查詢*/
{
printf("請你輸入要查找的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{ printf("\t\t\t\t查找結果\n");
printf(" 學號:%s\n姓名:%s\n性別:%s\n地址:%s\n年齡:%d\n",p->XINXI.num,p->XINXI.name,p->XINXI.sex,p->XINXI.address,p->XINXI.age);
}
else
SORRY();
}
if(sel==2) /* 輸入姓名查詢 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{ printf("\t\t\t\t查找結果\n");
printf(" 學號:%s\n姓名:%s\n性別:%s\n地址:%s\n年齡:%d\n",p->XINXI.num,p->XINXI.name,p->XINXI.sex,p->XINXI.address,p->XINXI.age);
}
else
SORRY();
}
else
Wrong();
}
/*以下是修改學生信息的函數*/
void XIUGEI(LB_2 l)
{
LB_1 *p;
long int i,j;
char findmess[20];
if(!l->next)
{ printf("\n(必看提示):對不起,現文件中沒有信息:所以您不能查詢!\n");
return;
}
for(i=1;i<=2;i++)
{
printf("\n\n\n\n\n");
printf("請輸入密碼:");
scanf("%s",&j);
if(j==2007)break;
else
{if(j!=2007)
return(CAIDANG());
}
}
printf("請你輸入要修改的學生學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{ printf("請你輸入新學號(原來是%s):",p->XINXI.num);
scanf("%s",p->XINXI.num);
printf("請你輸入新姓名(原來是%s):",p->XINXI.name);
scanf("%s",p->XINXI.name);
printf("請你輸入新性別(原來是%s):",p->XINXI.sex);
scanf("%s",p->XINXI.sex);
printf("請你輸入新地址(原來是%s):",p->XINXI.address);
scanf("%s",p->XINXI.address);
printf("請你輸入新年齡(原來是%d):",p->XINXI.age);
scanf("%s",p->XINXI.age);
getchar();
M=1;
}
else
SORRY();
}
/*保存在文件中*/
void BAOCONG(LB_2 l)
{
FILE* fp;
LB_1 *p;
int flag=1,count=0;
fp=fopen("c:\\lyg","wr");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發生錯誤!\n");
exit(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(LB_1),1,fp)==1)
{ p=p->next;
count++;
}
else
{ flag=0;
break;
}
}
if(flag)
{ printf("\n 提示;正在保存文件 共保存了%d條信息\n",count);M=0;
}
fclose(fp);
}
/*以下是主函數*/
void main()
{
LB_2 l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;long i,j,d;
char ch;
char jian;
int count=0;
LB_1 *p,*r;
color();
clrscr();
l=(LB_1*)malloc(sizeof(LB_1));
l->next=NULL;
r=l;
fp=fopen("C:\\lyg","rb");
if(fp==NULL)
{
printf("\t\t\t\t\n\n");
printf("\n");
printf(" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" Welcome to come to our system!!! \n"
" You can only inquire your own messages! If you want to see about other \n"
" students' messages,you need first to send inquirment to them,asking for \n"
" agreement,then you can visit his/her messages! \n"
" Have a good time! now you can come in!!! \n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" 注意:系統啟動碼為 : ILOVEMYSCHOOLVERYMUCH !!! \n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n");
printf("歡迎使用,本系統中現沒有任何記錄,您要先創建文件請按以下操做進行PLEASE:\n");
printf("\n 提示:文件還不存在,是否創建?(y/n)請做選擇--\n");
printf("\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
{fp=fopen("C:\\lyg","wb");
clrscr();
}
{for(i=1;i<=2;i++)
{
printf("\n\n\n\n\n");
printf("請輸入密碼:");
scanf("%ld",&j);
if(j==2007)break;
else
{if(j!=2007)return;
}
}
}
exit(0);clrscr();
}
while(!feof(fp))
{
p=(LB_1*)malloc(sizeof(LB_1));
if(fread(p,sizeof(LB_1),1,fp)) /* 將文件的內容放入鏈表中 */
{
p->next=NULL;
r->next=p;
r=p; /*把該結點放入鏈表中*/
count++;
}
}
fclose(fp); /* 關閉文件 */
while(1)
{
CAIDANG();
printf("請你選擇操作:");
scanf("%d",&sel);
clrscr();
printf("\n\n\n");
if(sel==0)
{
if(M==1)
{ getchar();
printf("\n(必看提示):鏈表中的信息已經改動,如果確認把改動保存在文件中請做選擇(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
BAOCONG(l);
}
break;clrscr();
}
switch(sel)
{
case 1: TIANJIA(l);break;
case 4: CHAXIONG(l);break;
case 3: BAOCONG(l);break;
case 2: XIUGEI(l);break;
case 5: SHANCHU(l);break;
default: getchar();break;
}
} end:
getchar();
}