纯C语言的练习程序,完全不涉及其它方面的知识
- 注释详细,代码完整,编译执行环境为vs2017社区版
- 源代码 main.c
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include<stdlib.h>
#include"ownfunctions.h"
#define length 30
typedef struct student
{
char num[10];
char name[10];
int math;
int pro;
int tag;
}Stu;
void addStu(Stu *class);
void delStu(Stu *class, int j);
void changeStu(Stu *class, int j);
void showStu(Stu *class, int j);
int findStu(Stu *class ,int k);
int length_of_class(Stu *class);
int main(void)
{
welcome();
showmenu();
Stu class[length];
int i;
for (i = 0; i < length; i++)
{
class[i].tag = 0;
}
int key;
key = menu();
int j;
while (key)
{
switch (key)
{
case 1:printf("its menu1 :增加一个学生的信息\n");
addStu(class);
break;
case 2:printf("its menu2 :删除一个学生的信息\n");
j = getstu();
delStu(class, j);
break;
case 3:printf("its menu3 :修改一个学生的信息\n");
j = getstu();
changeStu(class, j);
break;
case 4:printf("its menu4 :展示学生信息\n");
j = choosemenu();
showStu(class, j);
break;
default:break;
}
showmenu();
key = menu();
}
_exit();
return 0;
}
void addStu(Stu *class)
{
int i = 0;
while (class[i].tag == 1 && i < length)
i++;
if (i == length)
{
printf("班级已满,添加失败\n");
return;
}
class[i].tag = 1;
printf("输入第%d个学生的名字\n", i + 1);
scanf("%s", class[i].name);
printf("输入第%d个学生的学号\n", i + 1);
scanf("%s", class[i].num);
printf("输入第%d个学生的数学成绩\n", i + 1);
scanf("%d", &class[i].math);
printf("输入第%d个学生的专业成绩\n", i + 1);
scanf("%d", &class[i].pro);
printf("\n第%d个学生的名字是%s\n", i + 1, class[i].name);
printf("第%d个学生的学号是%s\n", i + 1, class[i].num);
printf("第%d个学生的数学成绩是%d\n", i + 1, class[i].math);
printf("第%d个学生的专业成绩是%d\n\n", i + 1, class[i].pro);
printf("第%d个学生的信息已录入\n", i + 1);
}
void delStu(Stu *class, int j)
{
int a;
a = length_of_class(class);
if (j > a || j < 1)
{
printf("您选择的学生不合理,返回上一级菜单\n");
return;
}
int i = findStu(class,j);
if (i == -1)
{
printf("查找学生失败,返回上一级菜单\n");
return;
}
printf("第%d个学生的名字:%s\n", j, class[i].name);
printf("第%d个学生的学号:%s\n", j, class[i].num);
printf("第%d个学生的数学成绩:%d\n", j, class[i].math);
printf("第%d个学生的专业成绩:%d\n", j, class[i].pro);
class[i].tag = 0;
printf("第%d个学生的信息已删除\n", j);
}
void changeStu(Stu *class, int j)
{
int a;
a = length_of_class(class);
if (j > a || j < 1)
{
printf("您选择的学生不合理,返回上一级菜单\n");
return;
}
int i = findStu(class, j);
if (i == -1)
{
printf("查找学生失败,返回上一级菜单\n");
return;
}
printf("第%d个学生的名字:%s\n", j, class[i].name);
printf("第%d个学生的学号:%s\n", j, class[i].num);
printf("第%d个学生的数学成绩:%d\n", j, class[i].math);
printf("第%d个学生的专业成绩:%d\n", j, class[i].pro);
printf("输入第%d个学生的名字\n", j);
scanf("%s", class[i].name);
printf("输入第%d个学生的学号\n", j);
scanf("%s", class[i].num);
printf("输入第%d个学生的数学成绩\n", j);
scanf("%d", &class[i].math);
printf("输入第%d个学生的专业成绩\n", j);
scanf("%d", &class[i].pro);
printf("第%d个学生的名字是%s\n", j, class[i].name);
printf("第%d个学生的学号是%s\n", j, class[i].num);
printf("第%d个学生的数学成绩是%d\n", j, class[i].math);
printf("第%d个学生的专业成绩是%d\n", j, class[i].pro);
printf("第%d个学生的信息已重新录入\n\n", j);
}
void showStu(Stu *class, int j)
{
if (j != 1 && j != 2)
{
printf("选择菜单项有误,返回上一级功能\n");
return;
}
int i;
int k = 0;
if (j == 1)
{
for (i = 0; i < length; i++)
{
if (class[i].tag == 1)
{
k++;
printf("第%d个学生的信息如下:\n",k);
printf("第%d个学生的姓名:%s\n", k,class[i].name);
printf("第%d个学生的学号:%s\n", k, class[i].num);
printf("第%d个学生的数学成绩:%d\n", k, class[i].math);
printf("第%d个学生的专业成绩:%d\n", k, class[i].pro);
}
}
printf("全部学生的信息已打印完毕\n");
}
else
{
printf("您希望展示第几位学生的信息:\n");
scanf("%d", &k);
while (k < 1 || k > length)
{
printf("您选择的学生不合理,请重新选择:\n");
scanf("%d", &k);
getchar();
}
i = findStu(class,k);
if (i == -1)
{
printf("查找学生失败,返回上一级菜单\n");
return;
}
printf("第%d个学生的信息如下:\n", k);
printf("第%d个学生的姓名:%s\n", k, class[i].name);
printf("第%d个学生的学号:%s\n", k, class[i].num);
printf("第%d个学生的数学成绩:%d\n", k, class[i].math);
printf("第%d个学生的专业成绩:%d\n", k, class[i].pro);
}
}
int findStu(Stu *class ,int k)
{
int i=0, j=0;
for (i = 0; i < length; i++)
{
if (class[i].tag == 1)j++;
}
if (k > j || k < 1)
{
printf("选择的学生不合理,返回上一级菜单\n");
return -1;
}
i = -1; j = 0;
while (j < k)
{
i++;
if (class[i].tag == 1)
{
j++;
}
}
return i;
}
int length_of_class(Stu *class)
{
int i ,j;
j = 0;
for (i = 0; i < length; i++)
{
if (class[i].tag == 1)
{
j++;
}
}
return j;
}
- 自定义函数的分文件编写 ownfunctions.h
#pragma once
#include<stdio.h>
extern length;
int menu(void);
void _exit(void);
void welcome(void);
void printstar(void);
void showmenu(void);
int getstu(void);
int choosemenu(void);
int menu()
{
int key;
scanf("%d", &key);
while (key < 0 || key>4)
{
printf("请输入合法的菜单选项");
scanf("%d", &key);
getchar();
}
return key;
}
void printstar(void)
{
printf("************************************\n");
}
void _exit(void)
{
printstar();
printf("\n\t感谢使用本系统\t再见\n\n");
printstar();
}
void welcome(void)
{
printstar();
printf("\t欢迎使用成绩管理系统\n");
printstar();
}
void showmenu(void)
{
printf("\t请输入数字0~4执行相应功能\n");
printf("\t0 退出系统\n\t1 增加一个学生的信息\n");
printf("\t2 删除一个学生的信息\n\t3 修改一个学生的信息 \n");
printf("\t4 查看一个学生的信息\n\t请勿输入其他内容\n\n\n");
}
int getstu(void)
{
int j;
printf("您想处理第几个学生的信息?\n");
scanf("%d", &j);
return j;
}
int choosemenu(void)
{
printf("输入数字1或2来选择功能\n");
printf("1:显示整个班级的学生信息\n");
printf("2:显示某个学生的信息\n");
int key;
scanf("%d", &key);
while (key < 1 || key>2)
{
printf("请输入合法的菜单选项");
scanf("%d", &key);
getchar();
}
return key;
}