目录
head.h头文件:
void login();
void menu();
void watch();
void add();
void write();
void del();
void sort();
void numsort();
void baocun();
void sort();
main.c (用作启动函数)
#include<stdio.h>
#include"head.h"
int main()
{
login();
return 0;
}
menu.c(菜单函数)
#include<stdio.h>
#include<stdlib.h>
#include"head.h"
void menu()
{
int num;
printf("欢迎进入《学生成绩管理系统》 V3.6 \n");
printf("===================================================\n");
printf("1.显示学生信息√ 2.添加学生信息√\n");
printf("3.修改学生信息 √ 4.删除学生信息√\n");
printf("5.按学号查找学生信息√ 6.对学生信息按学号升序排序√\n");
printf("7.备份系统数据√ 8.退出系统√\n");
printf("===================================================\n");
printf("请选择菜单编号:");
scanf_s("%d", &num);
switch (num)
{
case 1: watch();break;
case 2: add();break;
case 3: write();break;
case 4: del();break;
case 5: numsort();break;
case 6: sort();break;
case 7:baocun();break;
case 8: exit(0);
default:printf("请选择你想要的菜单项:");
}
printf("\n");
system("cls");
}
body.c(功能函数)
#include<stdio.h>
#include<string.h> //字符串相关指令
#include<ctype.h> //用于字符处理的指令
#include<stdlib.h> //包含清屏指令
#include"head.h"
//个人信息结构体的定义
typedef struct student
{
int num; //学号
char name[10]; //姓名
char sex[3]; //性别
char tel[12]; //电话
char address[50];//家庭住址
int age;//年龄
}STU;
STU stu1[5];
int count=0; //计数器
//函数功能 登录√
void login()
{
long passworld; //密码
char ac[10],i,j; //i用来保存能登录的次数
printf("欢迎登录《学生成绩管理系统》V3.2\n");
printf("--------【登录账号】--------\n");
for (i = 0; i<3; i++)
{
printf("请输入用户名:");
scanf("%s", &ac);
for (j = 0; j<3; j++)
{
printf("请输入密码:");
scanf("%ld",&passworld);
if(passworld==123456)
break;
else
printf("对不起,把你登陆失败,请重新进行登录!\n");
}
printf("\n登录成功!\n");
printf("按任意键进入学生信息管理系统!\n");
system("pause"); //暂停指令
system("cls"); //清屏指令
menu();
}
}
//函数功能:显示学生信息 √
void watch()
{
int i;
printf("\n--------【显示学生信息】--------\n");
printf("学号\t姓名\t性别\t年龄\t电话\t家庭住址\n");
for(i=0;i<count;i++)
{
printf("%d\t%s\t%s\t%d\t%s\t%s\n",stu1[i].num, stu1[i].name, stu1[i].sex, stu1[i].age, stu1[i].tel, stu1[i].address);
}
printf("已显示%d个学生的信息\n",count);
system("pause"); //暂停指令
system("cls"); //清屏指令
menu();
}
//函数功能:添加学生信息 √
void add()
{
void watch();
int i,n;
printf("\n--------【添加学生信息】--------\n");
printf("请输入本次要添加的学生信息的数量:");
scanf("%d",&n);
count=count+n;
for(i=0;i<n;i++)
{
printf("\n");
printf("请第%d个学生的信息:\n",i+1);
printf("请输入学号:");
scanf("%d",&stu1[i].num);
printf("请输入姓名:");
scanf("%s",stu1[i].name);
printf("请输入性别:");
scanf("%s",stu1[i].sex);
printf("请输入年龄:");
scanf("%d",&stu1[i].age);
printf("请输入电话:");
scanf("%s",stu1[i].tel);
printf("请输入家庭住址:");
scanf("%s",stu1[i].address);
}
system("pause"); //暂停指令
system("cls"); //清屏指令
menu();
}
//函数功能:修改学生信息√
void write()
{
int i,num2,num,flag=0;
printf("\n--------【修改学生信息】--------\n");
printf("请输入要修改的学生的学号:");
scanf("%d",&num2);
printf("\n");
for (i=0; i<count;i++)
{
if(stu1[i].num==num2)
{
flag=1;
break;
}
}
if(flag=1)
{
printf("===================================================\n");
printf("1.修改姓名\t2.修改年龄\n");
printf("3.修改性别\t4.修改电话\n");
printf("5.修改家庭住址\t6.退出本菜单\n");
printf("===================================================\n");
while (1) //便于多次使用修改菜单
{
printf("请选择菜单编号:");
scanf("%d", &num);
switch (num)
{
case 1:
printf("原来的姓名为:%s\n",stu1[i].name);
printf("请输入新的姓名:");
scanf("%s", stu1[i].name);
break;
case 2:
printf("原来的年龄为:%s\n",stu1[i].age);
printf("请输入新的年龄:");
scanf("%d", &stu1[i].age);
break;
case 3:
printf("原来的性别为:%s\n",stu1[i].sex);
printf("请输入新的性别:");
scanf("%s", stu1[i].sex);
break;
case 4:
printf("原来的电话为:%s\n",stu1[i].tel);
printf("请输入新的电话:");
scanf("%s", stu1[i].tel);
break;
case 5:
printf("原来的家庭住址为:%s\n",stu1[i].address);
printf("请输入新的家庭住址:");
scanf("%s", stu1[i].address);
break;
case 6:
printf("退至主菜单");
system("cls");
menu();
break;
default:printf("请在1-6之间选择");
}
}
printf("修改完毕!请及时保存!\n");
}
else if(flag!=0)
{
printf("没有该学生学号!!!");
}
}
//函数功能:删除数据√
void del()
{
int i, j,k,flag=0; //k保存下标,flag用于表示信息是否删除成功
int num2;
printf("\n--------【删除学生信息】--------\n");
printf("请输入要删除学生的学号:");
scanf("%d",&num2);
for (i=0;i<count;i++)
{
if (stu1[i].num==num2)
{
k=i;
flag=1;
break;
}
}
if(flag=1)
{
for (j=k;j<count-1;j++)//要删除学生后面的学生往前移一位
{
stu1[j]=stu1[j+1];
}
}
else if(flag!=1)
{
printf("该学号不存在!!!\n");
}
printf("删除成功\n");
count--;
system("pause");
system("cls");
menu();
}
//函数功能:按学号查询 √
void numsort()
{//k用来保存找到的元素下标
int i,k,id,res=0;//res用来识别是否存在要修改的学生信息
printf("请输入要查询的学生学号:");
scanf("%d",&id);
for(i=0;i<count;i++)
if(stu1[i].num==id){
k=i;
res=1;
break;
}
if(res)
{
printf("学号\t姓名\t性别\t年龄\t电话\t家庭地址\n");
printf("%d\t%s\t%s\t%d\t%s\t%s\n",stu1[k].num,stu1[k].name,stu1[k].sex,stu1[k].age,stu1[k].tel,stu1[k].address);
}
else
printf("对不起,学号为%d的学生信息不存在!\n",id);
system("pause");
system("cls");
menu();
}
//函数功能:按学号排序√
void sort()
{
int i,j; //i,j用于冒泡排序
STU temp; //定义一个冒泡排序时的中间变量
for(i=0;i<count-1;i++) //排序的总趟数:总数据量-1
{
for(j=0;j<count-1-i;j++)//每趟比较的次数:总数据量-1-趟数
{
if(stu1[j].num>stu1[j+1].num)//比较两个元素,满足条件交换,改变符号可更改所排的顺序
{
temp=stu1[j]; //交换顺序
stu1[j]=stu1[j+1];
stu1[j+1]=temp;
}
}
}
printf("恭喜,排序成功!\n");
system("pause"); //暂停指令
system("cls"); //清屏指令
menu();
}
//函数功能:保存信息 √
void baocun()
{
int i;
FILE *fp; //定义文件指针
printf("\n--------【保存学生信息】--------\n");
if((fp=fopen("student9999.txt", "w"))==NULL); //以只写形式打开文件,若失败,则返回NULL,并新建一个文件
{
for (i=0;i<count;i++)
{
fprintf(fp, "%d %s %s %d %s %s\n", stu1[i].num, stu1[i].name, stu1[i].sex, stu1[i].age,stu1[i].tel,stu1[i].address);
printf("保存成功!!!\n");
}
}
fclose(fp); //关闭文件
system("pause");
system("cls");
menu();
}