刚抽到这题的时候没在意,但是真正做起来的时候,才觉得这题对于零基础的人来说是十分的困难。首先从题目的字数来看题目字数已经不少,其次看了几遍题目之后还是无从下手。不管你们觉得难不难,反正对于零基础的我来说,不是一个难字可以了得。最后只能找资料来寻求一些思路,看了一些这样的帖子以后,思路明晰了不少,不过感觉他们搞的有些太复杂了,于是站在前人的肩膀上,再结合我自己的想法,创作出了我自己的作品,现在贴出来,给同样题目的童鞋一些参考。当然得申明一下,在写代码的时候,由于时间和学识的关系,只是奔着能运行的目的去的,没有做深一步的优化,基础好的朋友,可以自己优化一下,或者用帖子回复出来,共同学习进步,不过程序我是运行测试过的,没什么问题。
如果你觉得我写的还凑合,请麻烦给点个赞,不胜感激!3Q
#import <Foundation/Foundation.h>
//函数的申明
void in(); // 增加学生信息
void search(); // 查询学生信息
void del(); // 删除学生信息
void menu(); // 自定义函数实现菜单功能
void menu2(); // 删除功能的菜单
void step(); // 所有功能定义
// 定义一个学生的结构体
struct Student
{
int number; // 学号
int age; // 年龄
char sex[10]; // 性别
char name[10]; // 姓名
double score; // 分数
};
// 定义一个可放100人的学生组
struct Student str[100];
//自定义函数实现菜单功能
void menu()
{
// 提示用户输入
printf("\t\t\t\t\t\t*******************\n");
printf("\t\t\t\t\t\t 1.增加学生信息\n");
printf("\t\t\t\t\t\t 2.删除学生信息\n");
printf("\t\t\t\t\t\t 3.查询学生信息\n");
printf("\t\t\t\t\t\t 0.退出学生系统\n");
printf("\t\t\t\t\t\t*******************\n");
printf("请选择操作(0-3): ");
}
// 所有功能定义
void step ()
{
menu();
// 保证功能函数一直不退出循环,想退出的时候再退出(可退出的死循环)
for (; ; )
{
// 定义功能的标识
int n = -1;
// 接收用户的选择
scanf("%d", &n);
// 定义用户所需进入的选择
if (n == 1)
{
in(); // 增加
break;
}
else if (n == 2)
{
del(); // 删除
}
else if (n == 3)
{
search(); // 查询
}
else
{
printf("\t\t\t\t\t\t****已退出学生系统****\n");
break; // 退出
}
}
}
//增加学生信息
void in()
{
// 使用for循环接收100个学生的信息
for ( int i = 0 ; i < 100; i++)
{
// 提示用户输入该生的姓名
printf("请输入该学生的姓名\n");
// 接收输入的姓名
scanf("%s",str[i].name);
// 提示用户输入该生的年龄
printf("请输入该学生的年龄(5岁-30岁之间)\n");
scanf("%d",&str[i].age);
// 检查年龄是否适当(5岁-20岁之间)
while (str[i].age<5 || str[i].age>30)
{
printf("*对不起您的学生年龄输入可能有误*\n");
printf("请重新输入该学生年龄\n");
scanf("%d",&str[i].age);
}
// 提示用户输入该生的性别,定义性别为:man或者woman
printf("请输入该学生的性别(man或woman)\n");
while(getchar()!='\n');
/*清空输入缓存,当碰到下一个输入数据是char类
型,在第一次输入结束后加上这条语句*/
scanf("%s",str[i].sex);
// 提示用户输入该生的学号
printf("请输入该学生的学号\n");
scanf("%d",&str[i].number);
// 检查学号是否相同,学号具有惟一性,不能同时给多人赋值
for (int a = i-1; str[i].number == str[a].number; a--)
{
while (str[i].number == str[a].number)
{
printf("对不起该学号已经存在,请重新输入\n");
scanf("%d",&str[a].number);
}
}
// 提示用户输入该生分数
printf("请输入该学生的分数\n");
scanf("%f",&str[i].score);
// 检查分数是否适当
while (str[i].score<0 || str[i].score>100)
{
printf("对不起您的考生考分不符合判卷标准\n");
printf("请重新输入该学生的分数\n");
scanf("%f",&str[i].score);
}
// 打印该生的所有个人信息
printf("第%d次录入的学生信息为:\n姓名-%s\n年龄-%d\n性别-%s\n学号-%d\n分数-%f\n ",i+1, str[i].name, str[i].age, str[i].sex, str[i].number,str[i].score);
// 判断是否继续录入
printf("\t\t*继续添加 请按1;返回菜单请按任意键*\n");
int m = 0;
scanf("%d", &m);
if (m == 1)
{
continue;
}
else
{
step();
}
break;
}
}
// 删除功能的菜单,规定学号为唯一识别符,在最后删除信息的时才可以删除
void menu2()
{
printf("\t\t\t\t\t\t\t请按照提示选择\n");
printf("\t\t\t\t\t\t------------\n");
printf("\t\t\t\t\t\t\t返回上一级菜单按0\n");
printf("\t\t\t\t\t\t\t 删除姓名按1\n");
printf("\t\t\t\t\t\t\t 删除年龄按2\n");
printf("\t\t\t\t\t\t\t 删除性别按3\n");
printf("\t\t\t\t\t\t\t 删除分数按4\n");
printf("\t\t\t\t\t\t\t删除全部信息按5\n");
printf("\t\t\t\t\t\t------------\n");
printf("请选择操作(0-5): ");
}
// 删除学生信息,规定学生的学号为唯一识别码,用其进行学生身份的判断
void del()
{
// 提示用户输入学号,进行身份核对
printf("请输入该生的学号,进行身份验证:\n");
int n = 0;
scanf("%d",&n);
// 用遍历的方法在系统里查找这个学号对应的数组
for (int i = 0; i<100; i++)
{
// 判断输入的学号是否与已录入的学号相等
if (str[i].number == n)
{
printf("该学生全部信息为:\n姓名是%s\n年龄是%d\n性别是%s\n学号是%d\n分数是%f\n",str[i].name, str[i].age, str[i].sex, str[i].number,str[i].score);
// 如果学号匹配,调用删除功能的菜单,提示用户下一步操作
menu2();
// 判断要删除哪一项,
int b = -1;
scanf("%d",&b);
// 返回上一级菜单
if (b==0)
{
step();
break;
}
// 删除姓名
else if (b ==1)
{
strcpy(str[i].name, "0");
printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
menu2();
}
// 删除年龄
else if (b ==2)
{
str[i].age = 0;
printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
menu2();
}
// 删除性别
else if (b ==3)
{
strcpy(str[i].sex, "0");
printf("学号是%d\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number, str[i].age, str[i].sex, str[i].score);
menu2();
}
// 删除分数
else if (b ==4)
{
str[i].score = 0;
printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
menu2();
}
// 删除全部信息
else if (b ==5)
{
str[i].number = 0;
strcpy(str[i].name, "0");
str[i].age = 0;
strcpy(str[i].sex, "0");
str[i].score = 0;
printf("学号是%d\n姓名是%s\n年龄是%d\n性别是%s\n分数是%f\n",str[i].number,str[i].name, str[i].age, str[i].sex, str[i].score);
}
break;
}
// 输入的学号与已经录入的不匹配
else
{
printf("该学号不存在,请重新确认\n");
printf("继续--请按1;返回主菜单--请按任意键\n");
int b = 0;
scanf("%d",&b);
if (b == 1)
{
del();
}
else
{
menu();
}
break;
}
}
}
// 查询学生信息,规定学生的学号为唯一识别码,用其进行学生身份的判断
void search()
{
// 提示用户输入该生的学号
printf("*请输入该生学号:*\n");
int n = 0;
scanf("%d", &n);
// 找到这个学号对应的数组
for (int i = 0; i<100; i++)
{
// 判断输入学号是否与已录入的学号相匹配
// 匹配
if (str[i].number == n)
{
printf("该学生信息为:\n姓名是%s\n年龄是%d\n性别是%s\n学号是%d\n分数是%f\n",str[i].name, str[i].age, str[i].sex, str[i].number,str[i].score);
break;
}
// 不匹配
else
{
printf("\t\t\t\t\t**该学号不存在,请重新确认**\n");
break;
}
}
// 判断是否继续查询
printf("\n");
printf("继续查询--请按1;返回主菜单--请按任意键\n");
int b = 0;
scanf("%d",&b);
if (b == 1)
{
search();
}
else
{
menu();
}
}
int main(int argc, const char * argv[])
{
@autoreleasepool
{
// 提示用户登陆学生管理系统
printf("\n\n\n\n\t\t\t\t\t\t 欢迎使用学生管理系统!\n");
// 调用主菜单,进行相应操作
step();
return 0;
}
}