CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
导言
学生菜单系统是基于前阶段的C语言学习,从实际出发,巩固C语言基础的练习,通过多种函数的不同运用,检验知识点的牢固可靠性。
系统设计概述
整个学生系统将会被分成几个内容,将大任务分为多个小任务,并将其合理连接起来,独立而又有联系,对逻辑能力有一定要求(没错,我是木头)
设计多个模块
- 开发团队信息(即首页,目前来说是次要,直接运用printf即可)
- 模拟系统密码登录(通过循环对不同密码情况进行判定,从而使系统做出不同反应,一般包含①密码正确,进入系统②密码错误,退出系统,这两种情况)根据平时实际情况,多次输入密码错误,也可以添加这一项内容,实现更完整的功能还原
- 学生信息录入版块(运用结构体和数组,对学生多项信息进行输入,可包括姓名,学号,性别,年龄,成绩等。由于是模拟班级或者学校系统,所以会模拟多个学生信息录入的过程,此过程可运用循环实现)
- 计算分数版块(使用简单的运算法则即可完成,此处还可细分两种,一种是计算成绩总分,另一种是计算平均分)
- 信息修改版块(通过学生学号查找,进行修改、添加或删除等 *** 作)
- 成绩排序版块(运用冒泡法,对学生一一对比,按学生总分进行排序输出)
- 系统退出
详细代码 *** 作
所涉及的头函数:
#include
#include
#include
#include
自定义函数:
showAuthor(); 团队信息
checkLogin(); 密码检测
MainMenu(); 主菜单
input(); 信息录入
add(); 添加信息
Delete(); 删除信息
countScore(); 等级评定
oderbyScore() 成绩排序
结构体定义:
使用结构体将所需学生信息罗列出来,定义一个数组,保存各项内容本文内容的系统包括的信息如下:学号,姓名,年龄,性别,手机号码,数学、英语、体育和语文的成绩,总分和平均分。(此处成绩不分为两个函数了,直接进行计算)
struct student //结构体
{
char sno[10]; //学号
char sname[10]; //姓名
int sage; //年龄
char ssex[10]; //性别
char stel[20]; //手机号码
float Math; //数学成绩
float C; //语文成绩
float English; //英语成绩
float Sport; //体育
float Score; //总成绩
float Aver; //平均分
};
struct student p[100]; //数组
详细设计
首先,进入系统显示的团队信息printf即可,无需过于复杂
模板如下
void showAuthor() // 显示团队信息
{
printf("========= ===**小九出品 $ 必属良品**==============\n");
printf("\n");
printf("=============技术不精**被逼无奈**实属下策=============\n");
printf("\n");
printf(" * * * 开发团队信息 * * * *\n");
printf("\n");
printf("====================**盗版必究**======================\n");
printf("\n");
}
其次呢,我们进入系统肯定得设置一串密码吧,由于学艺不精,这密码暂时只设置包含数字的吧,初始密码123456,暂且用 int 混过去。接着回想登录过程,有正误之分,那必然少不了else-if的参与,通过判定密码值,来确定循环条件中的0和1
而后,可设定一个计数器 cnt,用while循环实现当cnt=n次时,系统锁定自动退出
注:在这几项过程中,很明显若是单纯的一个画面,那必然导致文字繁多画面杂乱
我们就可以利用好system("cls");清屏特点,再适当时候,进行画面清楚
运用好这点,也可以配合Sleep(n);实现计时器的倒计时特点
void checkLogin() //密码检测登录
{
int PW = 123456; //密码
printf("请输入系统密码:");
for(cnt=0;cnt!=3;)
{
scanf("%d",&password);
if(password==PW)
{
n=1;
printf("登录成功,3秒后自动进入系统\n");
Sleep(1000);
printf("登录成功,2秒后自动进入系统\n");
Sleep(1000);
printf("登录成功,1秒后自动进入系统\n");
Sleep(1000);
system("cls");
break;
}
else
{
cnt++;
while(cnt==3)
{
printf("系统锁定,无法输入密码,3秒后系统自动关闭\n");
Sleep(2000);
system("cls");
printf("系统锁定,无法输入密码,2秒后系统自动关闭\n");
Sleep(1200);
system("cls");
printf("系统锁定,无法输入密码,1秒后系统自动关闭\n");
Sleep(1200);
system("cls");
exit(0);
}
printf("密码错误,再次输入密码:");
}
}
}
密码输入完成后,必然有主菜单,清屏d出主菜单界面,就可以用简单的循环来实现,同时编辑出上下左右的边框,美观!(全局变量中一定要定义好画布大小,否则该功能无法实现)
void MainMenu() //主菜单
{
int i,j;
printf("—————欢迎使用小九牌伪劣系统—————\n");
printf("\n");
printf("\n");
for(i=6;i<=high;i++)
{
for(j=0;j<=width;j++)
{
if((i==6)||(i==high))
{
printf("#"); //上下边框
}
else if((i==7)&&(j==16))
{
printf("1.信息录入\t");
}
else if((i==9)&&(j==16))
{
printf("2.添加信息\t");
}
else if((i==11)&&(j==16))
{
printf("3.删除信息\t"); //待完善
}
else if((i==13)&&(j==16))
{
printf("4.等级评定\t"); //待完善
}
else if((i==15)&&(j==16))
{
printf("5.成绩修改\t"); //待完善
}
else if((i==17)&&(j==16))
{
printf("6.成绩排序\t"); //待完善
}
else if((i==19)&&(j==16))
{
printf("0.退出系统\t"); //待完善
}
else if((j==0)||(j==width))
{
printf("1");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
效果如下:
接着就是菜单的跳转功能,此处就要运用到一个与它必然相关的选择Switch-case
运用不同的case n:,跳转到不同的函数,进行相应的 *** 作。格式重复,十分简单。
while(1)
{
printf("请输入你的选择(0-6)");
scanf("%d",&num_choose);
switch(num_choose)
{
case 1:
input();
system("cls");
break;
case 2:
add();
system("cls");
break;
case 3:
Delete();
system("cls");
break;
case 4:
countScore();
system("cls");
break;
case 5:
oderbyScore();
system("cls");
break;
case 6:
modifyScore();
system("cls");
break;
case 0:
system("cls");
break;
default:printf("结束\a");system("cls");
}
}
后面就以一个自定义函数为例,运用结构体和数组,实现学生信息的录入
这里的第一步,自然是判断学生的人数,根据实际判断条件,给while的 *** 作与否提供数值,当学生人数超出范围,那自然要重新输入。
再运用i定义出不同的p[i],给不同学号i的学生留出空间
void input() //信息录入
{
int i,j,k=1;
printf("请输入学生人数(0-100):");
scanf("%d",&j);
while((j<0)||(j>100))
{
printf("请重新输入学生人数(0-100):");
scanf("%d",&j);
}
n=j;
for(i=0;i
有输入就有修改选项,接下来就是删除信息板块
详细看代码,就不过多赘述了。
void Delete() //删除信息
{
int i,j,k,n=100;
printf("请输入要删除的学生的学号:");
scanf("%d",&k);
for(i=0;i100))
{
printf("学号不存在!请输入正确的学号:\n");
}
else
{
for(j=i;j
代码展示
目前只实现了这几个板块,后续还将继续补充其他板块,使这个系统更完整,残缺的代码就展示出来吧,仅供参考,我会继续努力,进一步完善。
#include
#include
#include
#include
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info={1,0}; //0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
int high = 20;
int width = 42;
int password;
int n;
int cnt = 0;
int choice;
int num_choose;
struct student
{
char sno[10];
char sname[10];
int sage;
char ssex[10];
char stel[20];
float Math;
float C;
float English;
float Sport;
float Score;
float Aver;
};
struct student p[100];
void showAuthor() // 显示团队信息
{
printf("========= ===**小九出品 $ 必属良品**==============\n");
printf("\n");
printf("=============技术不精**被逼无奈**实属下策=============\n");
printf("\n");
printf(" * * * 开发团队信息 * * * *\n");
printf("\n");
printf("====================**盗版必究**======================\n");
printf("\n");
}
void MainMenu() //主菜单
{
int i,j;
printf("—————欢迎使用小九牌伪劣系统—————\n");
printf("\n");
printf("\n");
for(i=6;i<=high;i++)
{
for(j=0;j<=width;j++)
{
if((i==6)||(i==high))
{
printf("#"); //上下边框
}
else if((i==7)&&(j==16))
{
printf("1.信息录入\t");
}
else if((i==9)&&(j==16))
{
printf("2.添加信息\t");
}
else if((i==11)&&(j==16))
{
printf("3.删除信息\t"); //待完善
}
else if((i==13)&&(j==16))
{
printf("4.等级评定\t"); //待完善
}
else if((i==15)&&(j==16))
{
printf("5.成绩修改\t"); //待完善
}
else if((i==17)&&(j==16))
{
printf("6.成绩排序\t"); //待完善
}
else if((i==19)&&(j==16))
{
printf("0.退出系统\t"); //待完善
}
else if((j==0)||(j==width))
{
printf("1");
}
else
{
printf(" ");
}
}
printf("\n");
}
}
void checkLogin() //密码检测登录
{
int PW = 123456; //密码
printf("请输入系统密码:");
for(cnt=0;cnt!=3;)
{
scanf("%d",&password);
if(password==PW)
{
n=1;
printf("登录成功,3秒后自动进入系统\n");
Sleep(1000);
printf("登录成功,2秒后自动进入系统\n");
Sleep(1000);
printf("登录成功,1秒后自动进入系统\n");
Sleep(1000);
system("cls");
break;
}
else
{
cnt++;
while(cnt==3)
{
printf("系统锁定,无法输入密码,3秒后系统自动关闭\n");
Sleep(2000);
system("cls");
printf("系统锁定,无法输入密码,2秒后系统自动关闭\n");
Sleep(1200);
system("cls");
printf("系统锁定,无法输入密码,1秒后系统自动关闭\n");
Sleep(1200);
system("cls");
exit(0);
}
printf("密码错误,再次输入密码:");
}
}
}
void input() //信息录入
{
int i,j,k=1;
printf("请输入学生人数(0-100):");
scanf("%d",&j);
while((j<0)||(j>100))
{
printf("请重新输入学生人数(0-100):");
scanf("%d",&j);
}
n=j;
for(i=0;i100))
{
printf("学号不存在!请输入正确的学号:\n");
}
else
{
for(j=i;j
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)