知道自己太弱,距離大神們差了十萬八千裡,但是我不希望自己将來成為一個平庸的程式員,是以希望借用部落格園這一平台來不斷發表自己的文章,進而不斷激勵自己,提升自己。-----靜平
上學期學了C語言,一直想要寫出個東西來,以前寫過一個通訊錄,上周末花了一天時間寫了一個學生資訊管理系統。但是兩者都有一個緻命的缺點:隻能在.exe檔案中儲存和使用,卻不能儲存在電腦中。想過用檔案的方法來實作,但是苦于水準太差。今天晚上看了一下c++中的檔案,恍然大悟。于是決定利用部落格園這一平台來記錄自己将一個c程式改成c++程式并且不斷完善它的過程。
好吧,下面先貼自己那醜的要命的代碼:(基本是用函數和switch堆砌而成的)
這部分是頭檔案部分:
#include<string.h>
#define strcpy strcpy_s //由于是在vs上編輯的,而且前期忘了加上_s,是以隻好用define這種小聰明的辦法了
typedef struct Primary
{
int sum;
int grade[20];
char subject[20][20];
int classs;
}Primary;
struct Student
{
Primary primary;
int ID;
char name[20];
};
struct Student student[1000];
static int i=0,count=0;
void sort();
void AddPrimary();
void AddStudent();
void ReaddStudent();
void LookUp();
void Change();
void Delete();
void Scan();
void AddGrade();
void DeleteGrade();
void ScanGrade();
void ChangeGrade();
void LookupGrade();
void Scanstatistic();
void sorting();
void grade();
void information();
void statistics();
void information()
{
printf("1----錄入基礎資訊(科目)\n");
printf("2----錄入學生資訊\n");
printf("3----追加學生資訊\n");
printf("4----查詢指定學生資訊\n");
printf("5----修改指定學生資訊\n");
printf("6----删除指定學生資訊\n");
printf("7----浏覽學生資訊\n");
printf("0----傳回主菜單\n");
printf("請輸入操作子產品代号:");
int choice1;
while (scanf_s("%d", &choice1))
{
switch (choice1)
{
case 1:AddPrimary(); break;
case 2:AddStudent(); break;
case 3:ReaddStudent(); break;
case 4:LookUp(); break;
case 5:Change(); break;
case 6:Delete(); break;
case 7:Scan(); break;
case 0:
{
printf("***************學生成績管理系統主菜單*****************************************\n");
printf("1----學生基本資訊管理子產品(錄入、修改、查詢、删除、浏覽)\n");
printf("2----學生成績資訊管理子產品(錄入、修改、查詢、删除、浏覽\n");
printf("3----學生成績統計子產品\n");
printf("0----退出系統\n");
printf("請輸入操作子產品代号:");
int choice;
while (scanf_s("%d", &choice))
{
switch (choice)
{
case 1:information(); break;
case 2:grade(); break;
case 3:statistics(); break;
case 0:printf("謝謝使用,再見\n"); exit(0);
}
}
}; break;
}
}
}
void grade()
{
printf("1----錄入學生成績\n");
printf("2----查詢指定學生成績\n");
printf("3----修改指定學生成績\n");
printf("4----删除指定學生成績\n");
printf("5----浏覽學生成績資訊\n");
printf("0----傳回主菜單\n");
printf("請輸入操作子產品代号:\n");
int choice1;
while (scanf_s("%d", &choice1))
{
switch (choice1)
{
case 1:AddGrade(); break;
case 2:LookupGrade(); break;
case 3:ChangeGrade(); break;
case 4:DeleteGrade(); break;
case 5:ScanGrade(); break;
case 0:
{
{
printf("***************學生成績管理系統主菜單************************************\n");
printf("1----學生基本資訊管理子產品(錄入、修改、查詢、删除、浏覽)\n");
printf("2----學生成績資訊管理子產品(錄入、修改、查詢、删除、浏覽\n");
printf("3----學生成績統計子產品\n");
printf("0----退出系統\n");
printf("請輸入操作子產品代号:");
int choice;
while (scanf_s("%d", &choice))
{
switch (choice)
{
case 1:information(); break;
case 2:grade(); break;
case 3:statistics(); break;
case 0:printf("謝謝使用,再見\n"); exit(0);
}
}
}; break;
}
}
}
}
void statistics()
{
printf("1----按成績從高到低排序\n");
//printf("2----統計\n");
printf("3----浏覽\n");
printf("0----傳回主菜單\n");
printf("請輸入操作子產品代号:\n");
int choice1;
while (scanf_s("%d", &choice1))
{
switch (choice1)
{
case 1:sorting(); break;
//case 2:statistic(); break;
case 3:Scanstatistic(); break;
case 0:
{
printf("***************學生成績管理系統主菜單**************************************\n");
printf("1----學生基本資訊管理子產品(錄入、修改、查詢、删除、浏覽)\n");
printf("2----學生成績資訊管理子產品(錄入、修改、查詢、删除、浏覽\n");
printf("3----學生成績統計子產品\n");
printf("0----退出系統\n");
printf("請輸入操作子產品代号:");
int choice;
while (scanf_s("%d", &choice))
{
switch (choice)
{
case 1:information(); break;
case 2:grade(); break;
case 3:statistics(); break;
case 0:printf("謝謝使用,再見\n"); exit(0);
}
}
}; break;
}
}
}
void AddPrimary()
{
printf("請輸入科目;\n");
printf("(注:當輸入科目後,如果想退出程式請按Enter鍵否則請按空格)\n");
getchar();
for (count = 0;; )
{
scanf_s("%s", student[0].primary.subject[count], sizeof(student[0].primary.subject[count]));
count++;
if (getchar() == '\n')break;
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void AddStudent()
{
again6:
printf("請依此輸入學生的ID,班級,姓名\n");
for (;;)
{
scanf_s("%d", &student[i].ID, sizeof(student[i].ID));
scanf_s("%d", &student[i].primary.classs, sizeof(student[i].primary.classs));
scanf_s("%s", student[i].name, 20 * sizeof(student[i].name[0]) );
i++;
if (getchar() == '\n')break;
}
printf("請問您是否想要繼續添加學生資訊?(Y/N)\n");
char choice1;
scanf_s("%c", &choice1);
if (choice1 == 'y' || choice1 == 'Y')
goto again6;
printf("如果您想回到上級菜單,請輸入0\n");
}
void ReaddStudent()
{
again1:
printf("請輸入您要追加資訊的學生的ID以及姓名:\n");
scanf_s("%d", &student[i].ID, sizeof(student[i].ID));
scanf_s("%s", student[i].name, 20 * sizeof(student[i].name[0]));
printf("是否還要繼續追加學生資訊?(Y/N)\n");
char choice1;
scanf_s("%c", &choice1);
if (choice1 == 'n' || choice1 == 'N')
return;
if (choice1 == 'y' || choice1 == 'Y')
goto again1;
Scanstatistic();
}
void LookUp()
{
again5:
printf("請輸入您要檢視的學生的ID:\n");
int id;
scanf_s("%d", &id);
int k;
int h = 1;
for (k = 0;k<i ; k++)
{
if (id == student[k].ID)
{
h = 0;
printf("學生資訊:\nID:\t\t姓名:\t\t班級:\n");
printf("%d\t\t%s\t\t%d\t\t\n", student[k].ID, student[k].name, student[k].primary.classs);
break;
}
}
if (h == 1)
{
printf("對不起,沒有找到您要查找的ID,請重新輸入\n");
goto again5;
}
char choice1;
scanf_s("%c", &choice1,sizeof(choice1));printf("請問您是否還想繼續檢視其他學生的資訊?(Y/N)\n");
if (choice1 == 'y' || choice1 == 'Y')
goto again5;
else
printf("如果您想回到上級菜單,請輸入0\n");
}
void Change()
{
again2:
printf("請輸入您要查詢的學生的ID:\n");
int id,h=0;
scanf_s("%d", &id);
for (int k = 0; k <= i; k++)
{
if (id == student[k].ID)
{
h = 1;
printf("請輸入您要修改的内容:\n1.姓名 2.班級 \n");
int choice1;
scanf_s("%d", &choice1);
if (choice1 == 1)
scanf_s("%s", student[k].name);
if (choice1 == 2)
scanf_s("%d", student[k].primary.classs);
break;
}
}
if (h == 0)
{
printf("對不起,沒有您要查找的學生ID,請重新查找\n");
goto again2;
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void Delete()
{
printf("請輸入您要删除的學生的ID:\n");
int id,k;
scanf_s("%d", &id);
for (k = 0;; k++)
{
if (id == student[k].ID)
{
strcpy(student[k].name, "NULL");
student[k].ID = 0;
student[k].primary.classs = 0;
break;
}
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void Scan()
{
printf("學生資訊:\nID:\t\t姓名:\t\t班級:\n");
int k;
for (k = 0; student[k].ID != 0; k++)
{
printf("%d\t\t%s\t\t%d\t\t\n", student[k].ID, student[k].name, student[k].primary.classs);
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void AddGrade()
{
printf("請輸入您想添加的學生ID:\n");
int id;
scanf_s("%d", &id);
printf("請依次輸入學生成績:\n");
int k;
for (int h = 0; h < i; h++)
{
if (id == student[h].ID)
{
for (k = 0; k < count; k++)
{
printf("%s:", student[0].primary.subject[k]);
scanf_s("%d", &student[h].primary.grade[k]);
}
}
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void DeleteGrade()
{
printf("請輸入您要删除的學生的ID和科目成績:\n");
int id;
scanf_s("%d", &id);
for (int k = 0;; k++)
{
if (student[k].ID == id)
{
for (int h = 0; h < count; h++)
student[k].primary.grade[h] = 0;
}
}
Scanstatistic();
printf("如果您想回到上級菜單,請輸入0\n");
}
void LookupGrade()
{
again4:
printf("請輸入您要檢視的學生的ID:\n");
int id;
for (int h = 0; h < count; h++)
printf("%s\t", student[0].primary.subject[h]);
printf("\n");
scanf_s("%d", &id);
for (int h = 0; h < i; h++)
{
if (student[i].ID == id)
{
for (int hehe = 0; hehe < count; hehe++)
{
printf("%d\t", student[h].primary.grade[hehe]);
}
}
}
printf("請問您還想檢視其他學生的各科成績嗎?(Y/N)\n");
char choice1;
scanf_s("%c", &choice1);
if (choice1 == 'y' || choice1 == 'Y')
goto again4;
printf("如果您想回到上級菜單,請輸入0\n");
}
void ScanGrade()
{
int h;
printf("下面是學生的ID、姓名以及各科成績以及總分:\n");
printf("ID:\t姓名:\t");
for (int hehe = 0; hehe <count; hehe++)
printf("%s\t", student[0].primary.subject[hehe]);
printf("總分\n");
for (h = 0; h <= i; h++)
{
printf("%d\t%s\t", student[h].ID, student[h].name);
for (int hehe = 0; hehe < count; hehe++)
printf("%d\t", student[h].primary.grade[hehe]);
printf("%d", student[h].primary.sum);
printf("\n");
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void ChangeGrade()
{
int id,chengji;
char kemu[20];
again3:
printf("請輸入您要修改的學生的ID以及科目和修改後的成績:\n");
scanf_s("%d%s%d", &id, kemu,&chengji);
for (int h = 0; h < i; h++)
{
if (id == student[h].ID)
{
for (int w = 0; w < count; w++)
{
if (strcmp(student[0].primary.subject[w], kemu) == 0)
{
student[h].primary.grade[w] = chengji;
break;
}
}
}
}
printf("請問您還要修改其他科目的成績嗎?(Y/N)\n");
char choice1;
scanf_s("%c", &choice1);
if (choice1 == 'y' || choice1 == 'Y')
goto again3;
Scanstatistic();
printf("如果您想回到上級菜單,請輸入0\n");
}
void Scanstatistic()
{
int sum;
for (int h = 0; h < i; h++)
{
for (int hehe = 0; hehe < count; hehe++)
{
student[h].primary.sum += student[h].primary.grade[hehe];
}
}
printf("如果您想回到上級菜單,請輸入0\n");
}
void sorting()
{
Scanstatistic();
printf("下面是學生各科成績以及總分:\n");
printf("ID:\t姓名:\t");
for (int h = 0; h < count; h++)
printf("%s\t", student[0].primary.subject[h]);
printf("總分:\n");
int k, h,num=0;
int max=0,token;
for (h = 0; h < i; h++)
{
for (k = 0; k <= i; k++)
{
if (student[h].primary.sum>max)
max = student[h].primary.sum;
}
}
}
void sort()
{
int k, j;
for (k = 0; k < i; k++)
{
for (j = k; j <= i; j++)
{
if (student[k].ID>student[j].ID)
{
int t;
char temp[20];
{
t = student[k].ID;
student[k].ID = student[j].ID;
student[j].ID = t;
}
{
t = student[k].primary.classs;
student[k].primary.classs = student[j].primary.classs;
student[j].primary.classs = t;
}
{
strcpy(temp, student[k].name);
strcpy(student[k].name, student[j].name);
strcpy(student[j].name, temp);
}
{
for (int h = 0; h < count;h++)
{
char temp[20];
strcpy(temp, student[k].primary.subject[h]);
strcpy(student[k].primary.subject[h], student[i].primary.subject[h]);
strcpy(student[i].primary.subject[h], temp);
}
}
}
}
}
}
接下來是主函數部分:
#include<stdio.h>
#include<Windows.h>
#include"functions.h"
int main()
{
for (int h = 0; h < 1000; h++)
student[i].ID = 0;
printf("***************學生成績管理系統主菜單*************************************\n");
printf("1----學生基本資訊管理子產品(錄入、修改、查詢、删除、浏覽)\n");
printf("2----學生成績資訊管理子產品(錄入、修改、查詢、删除、浏覽\n");
printf("3----學生成績統計子產品\n");
printf("0----退出系統\n");
printf("請輸入操作子產品代号:");
int choice;
while (scanf_s("%d", &choice))
{
switch (choice)
{
case 1:information(); break;
case 2:grade(); break;
case 3:statistics(); break;
case 0:printf("謝謝使用,再見\n"); return 0;
}
}
system("pause");
return 0;
}
由于寫代碼期間有了隔斷,是以思路并不是很完整,是以出現不少思維漏洞的地方,還有的功能尚未實作。
決定周末好好的整改一下個程式。
轉載于:https://www.cnblogs.com/nkuhjp/p/5263254.html