#include<stdio.h>
#include<stdlib.h>
#include<string.h>//需要用到strcmp函数
#define LEN 15//姓名和学号的最大字符数
#define N 50//最大学生人数
int n = 0, t = 1;//n代表当前学生人数,t用来控制整个程序的执行,以及程序的退出;
//函数声明
void menu();//主菜单函数
void insert();//增加学生信息
void search();//查找学生信息
void del();//删除学生信息
void present();//显示当前信息
void tuichu();//退出函数
struct student
{
char StuID[LEN];//学生学号
char Stuname[LEN];
int Stuage;
char Stusex;
float score[3]; //各科成绩
}stu[N];
int main()
{
int num;//num是菜单选项
while (t)//t是全局变量,用tuichu函数来控制循环是否继续
{
menu();//输出主菜单界面
printf("您好,请输入菜单编号:");
scanf("%d", &num);
switch (num)
{
case 1: insert(); break;
case 2: search(); break;
case 3: del(); break;
case 4: present(); break;
case 5: tuichu(); break;
default:printf("输入有误,请重新输入!");
}
}
system("pause");
return 0;
}
void menu()
{
printf("\n\n");
printf("*****************************************************\n");
printf("*----------------------duoduo------------------------\n");
printf("* 学生信息管理系统 *\n");
printf("*****************************************************\n");
printf("********************系统功能菜单*********************\n");
printf("---------------------- --------------------------\n");
printf("*****************************************************\n");
printf("** 1、插入学生信息 * 2、查找学生信息 **\n");
printf("*****************************************************\n");
printf("** 3、删除学生信息 * 4、输出学生信息 **\n");
printf("*****************************************************\n");
printf("** 5、退出系统 * **\n");
printf("*****************************************************\n");
printf("*****************************************************\n");
printf("---------------------- --------------------------\n");
}
void insert()
{
int i = n, j, flag, m = 0;//i代表增加学生信息过程中任意时刻的学生人数
printf("\n请输入待增加的学生人数:\n");
scanf("%d", &m);
if (m > 0) {
do {
flag = 1;
while (flag)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);//第几位学生从1开始计数,而stu[]从零开始,需要加1
scanf("%s", stu[i].StuID);
//判断学号是否重复
for (j = 0; j < i; j++) {
if (strcmp(stu[i].StuID, stu[j].StuID) == 0) {
printf("该学号已经存在,请重新输入!\n");
flag = 1;
break;
}
}
}
printf("请输入第%d位学生姓名:\n", i + 1);
scanf("%s", stu[i].Stuname);
printf("请输入第%d位学生年龄:\n", i + 1);
scanf("%d", &stu[i].Stuage);
getchar();//处理上面输入的换行符,不然系统会把换行符当做一个字符赋值给性别
printf("请输入第%d位学生性别:\n", i + 1);
scanf("%c", &stu[i].Stusex);
printf("请输入第%d位学生的C语言成绩:\n", i + 1);
scanf("%f", &stu[i].score[0]);
printf("请输入第%d位学生的高数成绩:\n", i + 1);
scanf("%f", &stu[i].score[1]);
printf("请输入第%d位学生的大学英语成绩:\n", i + 1);
scanf("%f", &stu[i].score[2]);
i++;
} while (i < n + m);//只要当前学生人数还没到达添加后的总人数,就得继续添加
}
n += m;// 添加完成,系统人数n的值也要增加
printf("添加完成!!!\n");
system("pause");
}
void search()
{
int i, num, flag;
char s1[LEN + 1];
printf("*****************************\n");
printf("**-------1.按学号查询------**\n");
printf("**-------2.按姓名查询------**\n");
printf("**-------3.退出本菜单------**\n");
printf("*****************************\n");
while (1)
{
flag = 0;
printf("请输入子菜单:");
scanf("%d", &num);
switch (num)
{
case 1:
printf("请输入需要查找学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].StuID, s1) == 0)
{
flag = 1;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}break;
case 2:
printf("请输入需要查找学生的姓名:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].Stuname, s1) == 0)
{
flag = 1;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}break;
case 3: return;
default: printf("请在1--3之间输入\n");
}
if (flag == 0)
printf("找不到该学生!\n请重新输入!");
}
}
void del()
{
int i, j, flag;
char s1[LEN];
printf("请输入需要删除的学生学号:\n");
scanf("%s", s1);
flag = 0;
for (i = 0; i < n; i++)
{
if (strcmp(s1, stu[i].StuID) == 0)
{
flag = 1;
for (j = i; j < n - 1; j++)
{
stu[j] = stu[j + 1];//直接把后面的学生都往前移动一位
}
}
if (flag == 1) break;//说明已经找到了需要删除的学生,结束循环
}
if (0 == flag)
{
printf("该学号不存在!!!\n");
}
if (1 == flag)
{
printf("删除成功\n");
n--;
}
system("pause");
}
void present()
{
int i;
if (n == 0)
{
printf("您好,现在没有学生信息,请先增加学生信息或者刷新再来试试!\n");
}
else
{
printf("现在共有%d名学生:\n", n);
printf("学号\t\t姓名\t\t性别\t\t年龄\t\tC语言\t\t高数\t\t英语\n");
for (i = 0; i < n; i++)
{
printf("%s\t\t%s\t\t%c\t\t%d\t\t%.2f\t\t%.2f\t\t%.2f\n", stu[i].StuID, stu[i].Stuname, stu[i].Stusex, stu[i].Stuage, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
system("pause");
}
void tuichu()
{
int h;//控制是否确认退出
printf("即将退出,确认请按1,取消请按0\n");
scanf("%d", &h);
if (h == 1)
{
t = 0;//t是main函数中while函数是否继续执行的控制条件,是一个全局变量,程序开头已经定义并且赋值位 1
printf("成功退出,感谢使用!\n");
}
if (h == 0)
{
printf("退出已取消!\n");
system("pause");
}
}
供参考:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 15//姓名和学号的最大字符数
#define N 50 //最大学生人数
int n = 0, t = 1;//n代表当前学生人数,t用来控制整个程序的执行,以及程序的退出;
struct student
{
char StuID[LEN];//学生学号
char Stuname[LEN];
int Stuage;
char Stusex;
float score[3]; //各科成绩
}stu[N];
void sort() //排序函数
{
int i, j;
struct student tmp;
for (i = n - 1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if (stu[j].score[0] > stu[j + 1].score[0]) // 以其中一门的课程成绩排序
{
tmp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = tmp;
}
}
}
}
int count() //统计人数函数
{
return n; // n 是学生人数的总和,还需要专门的统计?
}
不知道你这个问题是否已经解决, 如果还没有解决的话:发射机和接收机在出厂时已对码成功,如果不成功或者使用其他的发射机、接收机,需要对码。
注意:测试前,应确保油门引擎未启动,否则可能造成飞机损坏或者人员受伤。
点击图标进入主菜单,向上或向下滑动屏幕浏览设置菜单。如果要进入功能设置菜单,点击功能名称就可以了。点击
图标可以回到上级菜单。
飞行模式功能可设置最多9种飞行模式,并通过组合开关切换。此功能由五个部分组成:
A:设置一个通道用于模式控制,点击通道右边的图标,选择需要使用的通道。点击屏幕左侧的上下箭头,或者在屏幕右侧向上下滑动选择通道。选择√确认数值,或选择×退出修改菜单。
B:选择一个开关用于切换模式。
C:选择第二个开关用于切换模式。
D:数字代表当前飞行模式的编号,模型名称可以重命名。点击模型名称的图标,使用屏幕下方的键盘重命名,选择图标保存并返回上级菜单。
E:修改每个飞行模式对应的输出值。点击图标选择需要修改的数据位数,点击屏幕左侧的上下箭头或者在屏幕右侧向上下滑动选择输出值,选择√确认数值或选择×退出修改菜单。
飞行模式的数量可通过不同的开关组合决定,使用1个两档开关控制,可切换模式1和模式2,使用2个两档开关组合控制,可以切换4种飞行模式,使用2个三档开关组合控制,可以切换9种飞行模式,组合功能如下图:
在主界面点击计时器图标进入,系统提供两个计时器和三种不同模式的计时功能,并能够使用开关控制。设置的方法为:选择计时模式,Up为从零开始计时,Down是从设定的时间开始倒数计时,D/U(Down then Up)为从设定时间开始倒数计时到零,然后从零开始计时。如果选择[Down]或[D/U]计时模式,应点击[Setup]图标,然后点击需要修改的参数位数,点击屏幕左侧的上下箭头,或者在屏幕右侧向上下滑动改变时间。
正逆转功能用于矫正舵机或电机的控制方向。例如,如果由于飞机的结构原因,方向舵机必须反向安装,那么转动方向手轮,飞机会转向相反的方向。此时,将方向通道设置为反向,即可解决该问题。设置方向为:从列表中选择需要设置的通道,点击图标切换正向或者反向,[Nor]为正向,[Rev]为反向。
最大舵量功能用于设置各通道舵机的高低行程程度限制,根据模型结构来调节舵机的最大行程。左边蓝色图标对应低端方向的舵量,右边红色图标对应高端方向的舵量。设置方法为:从列表中选择需要设置的通道,点击低端或者高端图标。点击需要修改的参数位数,然后点击屏幕左侧的上下箭头或者在屏幕右侧上下滑动改变数值。之后选择√确认数值或者选择×退出修改菜单。
这个功能可以设置默认通道外的其他通道,用于控制模型的其他部分。设置方法为:点击图标两侧的箭头选择需要设置的通道,左边的图标表示当前通道控制器的类型,点击图标可选择由旋钮、遥感、按键和开关控制或者选择[NUL],然后点击右边图标选择当前通道控制器(如果通道被飞行模式占用,系统会提示此通道已不能再次被分配)。
记忆微调功能用来调整各通道舵机的中位。设置方法为:从列表中选择需要设置的通道,点击需要修改的参数位数,用箭头或者滑动修改数值。选择√确认或者×退出修改菜单。
混控
混控功能可用于设置通道之间的混控关系(当前状态为混控功能已开启,)。
设置主控通道,
设置从控通道,
为从通道添加偏移值,负值可使从通道向低端偏移,
设置主控通道高端对从控通道的影响范围,若高端混控设置到50%,当主控通道移动到100%时,从控通道同时移动到50%。
设置主控通道低端对从控通道的影响范围,若低端混控设置到50%,当主控通道移动到-100%时,从控通道同时移动到-50%。
设置方法为:点击[ON]图标开启混控功能,点击[master]右边的图标,并从通道列表中选择一项作为主控通道,点击[slave]右边的图标,并从通道列表中选择一项作为从控通道。根据需求为从控通道添加偏移,点击[Offset]右边的图标,选择需要修改的参数位数,然后点击箭头或者上下滑动屏幕改变偏移值,选择√确认或者×退出修改菜单。点击[Pos]右边的图标,选择需要修改的参数位数,然后点击箭头或者上下滑动屏幕改变偏移值,选择√确认或者×退出修改菜单。
该功能用于在接收机丢失信号或失控后保护飞机和操作人员的安全。失控保护菜单下显示十个通道的列表,如果在通道后显示[关闭],表示飞机在丢失信号后,该通道的舵机会继续保持失控前的位置继续行驶。如果显示一个百分比,则表示模型在丢失信号后,该通道的舵机会移动到百分比对应的位置,并保持在该位置继续行驶。
设置方法为:选择需要设置的通道,选择[On]开启功能,通过发射机上的控制装置将舵机调整至目标位置,界面底部坐标可显示当前通道输出值。选择[Setup]设置百分比数值。选择[Set all]可以一次性设置所有通道的失控保护位置,使用发射机上的控制装置将各通道舵机调整到目标位置,选择[Set all],然后在弹出的确认框中选择[Y](选择[Reset all]可以复位所有通道的失控保护位置)。
此功能可以设置屏幕的对比度和系统音量。拖动背光或者声音进度条中的黑色滑块,可修改屏幕对比度和系统音量。
此功能可选择接收机的两种输出模式,PWM和PPM模式。根据需求选择输出模式,黑点图标表示当前选定的模式。
此系统支持四种摇杆模式,根据需求在屏幕右侧点击[M1]、[M2]、[M3]或[M4],黑色图标表示当前选定的模式。
将系统恢复至默认的出厂设置,点击[Factory Reset]图标,在提示框中选择[Y]确认。