知道自己太弱,距离大神们差了十万八千里,但是我不希望自己将来成为一个平庸的程序员,所以希望借用博客园这一平台来不断发表自己的文章,从而不断激励自己,提升自己。-----静平
上学期学了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("(注:当输入科目后,如果想退出程序请按回车键否则请按空格)\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