回覆列表
-
1 # luxer吶
-
2 # 教女朋友學程式設計
建議把資料儲存到檔案中,然後下次啟動的時候,從檔案中讀取到記憶體中,就可以了!
專業說法叫 “資料持久化”!
想學習C語言程式設計,可以多看看我的主頁!
建議把資料儲存到檔案中,然後下次啟動的時候,從檔案中讀取到記憶體中,就可以了!
專業說法叫 “資料持久化”!
想學習C語言程式設計,可以多看看我的主頁!
你需要將資料儲存到檔案當中呀,如果你只是將資料儲存到陣列中,那麼每一次執行都會重置的
這是我之前課設寫的程式碼 寫的不好 你可以看一下
#include<stdio.h>
#define N 100
typedef struct {
char Callid[N];//電話號
char Name[N];//姓名
char Gender[N];//性別
char Address[N];//家庭住址
int Id;//學號
int Rank;//考試名次
int TotalRank;//綜合成績名次
double Math;//數學成績
double English;//外語成績
double Chinese;//語文成績
double Average;//平均成績
double TotalScore;//綜合測評成績
double PeerGrading;//同學互評
double FlightTracker;//老師評分
double CharacterGrades;//品德成績
}datatype;
void Printf(datatype stu[N], int j) {
int c;
printf("瀏覽資料前請先插入資料");
printf("1.輸出學生資訊");
printf("2.輸出學生考試成績");
printf("3.輸出學生綜測成績");
printf("4.輸出學生全部資訊");
scanf("%d",&c);
switch (c) {
case 1: for (int i = 0; i < j; i++){
printf("姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);
printf("***************************************************************************");
}
break;
case 2:for (int i = 0; i < j; i++) {
printf("姓名:%s 學號:%d\n", stu[i].Name,stu[i].Id);
printf("數學成績:%f 語文成績:%f 英語成績:%f 平均成績:%f 排名%d\n", stu[i].Math, stu[i].Chinese, stu[i].English, stu[i].Average, stu[i].Rank);
printf("***************************************************************************");
}
break;
case 3:for (int i = 0; i < j; i++) {
printf("姓名:%s 學號:%d\n", stu[i].Name,stu[i].Id);
printf("綜合測評成績:%f 同學互評:%f 老師評分:%f 品德成績:%f 綜合成績名次:%d\n", stu[i].TotalScore, stu[i].PeerGrading, stu[i].FlightTracker, stu[i].CharacterGrades, stu[i].TotalRank);
printf("***************************************************************************");
}
case 4:for (int i = 0; i < j; i++) {
printf("姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);
printf("數學成績:%f 語文成績:%f 英語成績:%f 平均成績:%f 排名%d\n", stu[i].Math, stu[i].Chinese, stu[i].English, stu[i].Average, stu[i].Rank);
printf("綜合測評成績:%f 同學互評:%f 老師評分:%f 品德成績:%f 綜合成績名次:%d\n", stu[i].TotalScore, stu[i].PeerGrading, stu[i].FlightTracker, stu[i].CharacterGrades, stu[i].TotalRank);
printf("***************************************************************************");
}
}
}
void find(datatype stu[N], int j,int i) {
int c=0;
int b;
for (int k = 0; k < j; k++) {
if (stu[k].Id == i) {
printf("姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[k].Name, stu[k].Gender, stu[k].Callid, stu[k].Address, stu[k].Id);
printf("數學成績:%f 語文成績:%f 英語成績:%f 平均成績:%f 排名%d\n", stu[k].Math, stu[k].Chinese, stu[k].English, stu[k].Average, stu[k].Rank);
printf("綜合測評成績:%f 同學互評:%f 老師評分:%f 品德成績:%f 綜合成績名次:%d\n", stu[k].TotalScore, stu[k].PeerGrading, stu[k].FlightTracker, stu[k].CharacterGrades, stu[i].TotalRank);
printf("***************************************************************************");
j++;
_getch();
}
}
if (c =0) {
printf("沒有查詢到此同學");
}
}
void Save(datatype stu[],int j) {
FILE* File;
File = fopen(".\\stu.txt", "wb");
rewind(File);
for (int i = 0; i <=j; i++) {
fprintf(File, "姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);
fprintf(File, "****************************************************\n");
}
fclose(File);
printf("\n資料儲存成功。\n");
}
void Menu(){
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 1.輸入學生資訊 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 2.插入同學資訊 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 4.瀏覽學生資訊 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 5.輸入考試成績 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 6.輸入綜測成績 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 7.更改學生成績 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 8.查詢同學資訊 ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** 9.退出** ** ** ** ** ** ** ** ** ** ** \n");
printf("** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** \n");
}
void Sort(datatype stu[N], int j) {
int k;
datatype temp;
for (int i = 0; i < j + 1; i++) {
k = i;
for (int o = i + 1; o <= j; o++) {
if (stu[k].Id > stu[o].Id) {
k = o;
}
}
if (stu[i].Id > stu[k].Id) {
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
}
int SaveStudent(datatype stu[N]) {//錄入學生基本資訊
datatype temp;
int k;
char c;
int j;
for ( j = 0; j <N; j++) {
printf("請輸入第 %d 號學生姓名:", j+1);
scanf_s("%s", stu[j].Name, sizeof(stu[j].Name));
printf("請輸入第 %d 號學生學號:", j+1);
scanf_s("%d", &stu[j].Id,sizeof(stu[j].Id));
printf("請輸入第 %d 號學生性別:", j+1);
scanf_s("%s", stu[j].Gender, sizeof(stu[j].Gender));
printf("請輸入第 %d 號學生家庭住址:", j+1);
scanf_s("%s", stu[j].Address, sizeof(stu[j].Address));
printf("請輸入第 %d 號學生聯絡號碼:", j+1);
scanf_s("%s",stu[j].Callid, sizeof(stu[j].Callid));
printf("如果輸入完成請按下‘*’以結束輸入程式,若繼續請按其他任意鍵\n");
c = _getch();
if (c == "*") {
break;
}
}
Sort(stu,j);
Save(stu,j);
return j + 1;
}
int Input(datatype stu[N],int j) {
printf("請輸入學生姓名:" );
scanf_s("%s", stu[j].Name, sizeof(stu[j].Name));
printf("請輸入學生學號:" );
scanf_s("%d", &stu[j].Id, sizeof(stu[j].Id));
printf("請輸入學生性別:");
scanf_s("%s", stu[j].Gender, sizeof(stu[j].Gender));
printf("請輸入學生家庭住址:");
scanf_s("%s", stu[j].Address, sizeof(stu[j].Address));
printf("請輸入學生聯絡號碼:");
scanf_s("%s", stu[j].Callid, sizeof(stu[j].Callid));
Sort(stu, j);
Save(stu, j);
return j + 1;
}
int Delete(datatype stu[N], int j) {
int i;
char c;
scanf("%d", &i);
for (int k = 0; k < j; k++) {
if (stu[k].Id == i) {
printf("姓名:%s 學號:%d 聯絡電話:%s 性別:%s 家庭住址:%s", stu[k].Name, stu[k].Id, stu[k].Callid, stu[k].Gender, stu[k].Address);
c = _getch();
if (c == "y") {
for (int i = k; k < j; k++) {
stu[k] = stu[k + 1];
}
return j - 1;
}
}
}
printf("沒有查詢到此同學");
return j;
}
void Sorce(datatype stu[N], int j){
for (int i = 0; i < j; i++) {
printf("請輸入%s學號%d的成績\n", stu[i].Name, stu[i].Id);
printf("請輸入語文成績:");
scanf("%lf", &stu[i].Chinese);
printf("請輸入數學成績:");
scanf("%lf", &stu[i].Math);
printf("請輸入外語成績:");
scanf("%lf", &stu[i].English);
stu[i].Average = (stu[i].Chinese + stu[i].Math + stu[i].English) / 3;
printf("%f", stu[i].Average);
}
int k;
datatype temp;
for (int i = 0; i < j; i++) {
k = i;
for (int o = i + 1; o <= j-1; o++) {
if (stu[k].Average > stu[o].Average) {
k = o;
}
}
if (stu[i].Average > stu[k].Average) {
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
for (int i = 0; i < j; i++) {
stu[i].Rank = j-i;
}
Sort(stu, j-1);
FILE* File;
File = fopen(".\\stu1.txt", "wb");
rewind(File);
for (int i = 0; i <j; i++) {
fprintf(File, "姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);
fprintf(File, "語文成績:%f 數學成績:%f 外語成績:%f 平均成績:%f 考試名次:%d\n", stu[i].Chinese, stu[i].Math, stu[i].English, stu[i].Average, stu[i].Rank);
fprintf(File, "****************************************************\n");
}
fclose(File);
printf("\n資料儲存成功。\n");
}
void TotalSorce(datatype stu[N], int j) {
for (int i = 0; i < j; i++) {
printf("請輸入%s學號%d的綜測成績\n", stu[i].Name, stu[i].Id);
printf("請輸入同學互評分:");
scanf("%lf", &stu[i].PeerGrading);
printf("請輸入品德成績:");
scanf("%lf", &stu[i].CharacterGrades);
printf("請輸入老師評分:");
scanf("%lf", &stu[i].FlightTracker);
stu[i].TotalScore = stu[i].Average * 0.6 + stu[i].PeerGrading * 0.1 + stu[i].CharacterGrades * 0.1 + stu[i].FlightTracker * 0.2;
}
int k;
datatype temp;
for (int i = 0; i < j ; i++) {
k = i;
for (int o = i + 1; o <= j-1; o++) {
if (stu[k].TotalScore > stu[o].TotalScore) {
k = o;
}
}
if (stu[i].TotalScore > stu[k].TotalScore) {
temp = stu[i];
stu[i] = stu[k];
stu[k] = temp;
}
}
for (int i = 0; i < j; i++) {
stu[i].TotalRank = j-i;
}
Sort(stu, j-1);
FILE* File;
File = fopen(".\\stu2.txt", "wb");
rewind(File);
for (int i = 0; i < j; i++) {
fprintf(File, "姓名:%s 性別:%s 聯絡號碼:%s 家庭住址:%s 學號:%d\n", stu[i].Name, stu[i].Gender, stu[i].Callid, stu[i].Address, stu[i].Id);
fprintf(File, "語文成績:%f 數學成績:%f 外語成績:%f 平均成績:%f 考試名次:%d\n", stu[i].Chinese, stu[i].Math, stu[i].English, stu[i].Average, stu[i].Rank);
fprintf(File, "同學互評分:%f 品德成績:%f 老師評分:%f 綜測總分:%f 綜測排名:%d\n", stu[i].PeerGrading, stu[i].CharacterGrades, stu[i].FlightTracker, stu[i].TotalScore, stu[i].TotalRank);
fprintf(File, "****************************************************\n");
}
fclose(File);
printf("\n資料儲存成功。\n");
}
void ESorce(datatype stu[N], int j) {
int i;
int a;
printf("請輸入要修改同學的學號");
scanf("%d", &a);
find(stu, j,a);
for (i = 0; i < j; i++) {
if (stu[i].Id == a) {
printf("請輸入%s學號%d的成績\n", stu[i].Name, stu[i].Id);
printf("請輸入語文成績:");
scanf("%lf", &stu[i].Chinese);
printf("請輸入數學成績:");
scanf("%lf", &stu[i].Math);
printf("請輸入外語成績:");
scanf("%lf", &stu[i].English);
stu[i].Average = (stu[i].Chinese + stu[i].Math + stu[i].English) / 3;
rintf("請輸入%s學號%d的綜測成績\n", stu[i].Name, stu[i].Id);
printf("請輸入同學互評分:");
scanf("%lf", &stu[i].PeerGrading);
printf("請輸入品德成績:");
scanf("%lf", &stu[i].CharacterGrades);
printf("請輸入老師評分:");
scanf("%lf", &stu[i].FlightTracker);
stu[i].TotalScore = stu[i].Average * 0.6 + stu[i].PeerGrading * 0.1 + stu[i].CharacterGrades * 0.1 + stu[i].FlightTracker * 0.2;
}
}
Sort(stu, j);
Save(stu, j);
}
void Find1(datatype stu[N], int j) {
char f[N];
int d;
int a;
int k = 0;
printf("1.按學號查詢");
printf("2.按姓名查詢");
printf("3.按聯絡方式查詢");
scanf("%d",&d);
switch (d) {
case 1:
{
printf("請輸入學號:");
scanf("%d", &a);
find(stu, j, a);
break;
}
case 2: {
printf("請輸入姓名:");
scanf("%s", f);
for (int i = 0; i < j; i++) {
if (f == stu[i].Name) {
a = stu[i].Id;
find(stu, j, a);
k++;
}
}
if (k = 0) {
printf("沒有找到此學生");
}
break;
}
case 3:
printf("請輸入聯絡方式:");
scanf("%s", f);
for (int i = 0; i < j; i++) {
if (f == stu[i].Callid) {
a = stu[i].Id;
find(stu, j, a);
k++;
}
}
if (k = 0) {
printf("沒有找到此同學");
}
}
}
int main() {
int count;
int c;
datatype stu[N];
while (1) {
Menu();
scanf("%d", &c);
switch (c) {
case 1:
count = SaveStudent(stu);
system("cls");
break;
case 2:
count = Input(stu, count);
system("cls");
break;
case 3:
count = Delete(stu, count);
system("cls");
break;
case 4:
Printf(stu, count);
system("cls");
break;
case 5:
Sorce(stu, count);
system("cls");
break;
case 6:
TotalSorce(stu, count);
system("cls");
break;
case 7:
ESorce(stu, count);
system("cls");
break;
case 8:
Find1(stu, count);
system("cls");
break;
case 9:
return 0;
}
}
}