大一C语言课程设计——班级档案管理系统
记录我在大一第二学期期末做的C语言课程毕业设计
1. 班级档案管理系统运用到的主要结构体
typedef struct birthday //出生日期
{
int year;
int month;
int day;
}Birthday;
struct file //学生档案信息
{
char id[20];//学号
char name[20];//姓名
char sex[2];//性别
int age;//年龄
Birthday birthday;//出生日期
char desc[20];//备注
}File[N];
2.班级档案管理系统任务目标
对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
功能要求:
(1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
(2)本系统显示这样的菜单:
请选择系统功能项:
a 学生基本信息录入
b 学生基本信息显示
c 学生基本信息保存
d 学生基本信息删除
e 学生基本信息修改(要求先输入密码)
f 学生基本信息查询
(1)按学号查询
(2)按姓名查询
(3)按性别查询
(4)按年龄查询
g. 退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生基本信息保存到文件中。
(5)进入系统之前要先输入密码。
3.程序框图或流程图,程序清单与调用关系
(1)系统结构程序框图



2)程序清单
各函数的主要功能:
| 函数 | 功能 | 
| void load() | 系统登陆验证 | 
| save_password(charstr[]) | 保存密码 | 
| void menu() | 菜单功能 | 
| void input(int n) | 录入学生信息 | 
| void output() | 显示学生信息 | 
| void save(int n) | 保存学生信息 | 
| void dele() | 删除学生信息 | 
| void change() | 修改学生信息 | 
| void invest() | 查询学生信息 | 
| void change_password() | 修改密码 | 
| void over() | 退出系统 | 
(3)函数调用关系图

4.c程序源码
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 200
typedef struct birthday
{
int year;
int month;
int day;
}Birthday;
struct file
{
char id[];//学号
char name[];//姓名
char sex[];//性别
int age;//年龄
Birthday birthday;//出生日期
char desc[];//备注
}File[N]; void toxy(int x, int y) //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos);
} void load();//系统登陆页面
void save_password(char str[]);//保存密码
void menu();//系统主菜单
void input(int n);//学生信息录入
void output();//学生信息显示
void save(int n);//学生信息保存
void dele();//学生信息删除
void change();//学生信息修改
void invest();//学生信息查询
void change_password();//修改密码
void over();//退出系统 void input(int n)//信息录入,录入学生的基本信息
{
int i;
for(i=;i<n;i++)
{
system("cls");//清屏
toxy(,);
printf("请输入学生学号:");
scanf("%s",File[i].id);
toxy(,);
printf("请输入学生姓名:");
scanf("%s",File[i].name);
toxy(,);
printf("请输入学生性别(男/女):");
scanf("%s",File[i].sex);
toxy(,);
printf("请输入学生年龄:");
scanf("%d",&File[i].age);
toxy(,);
printf("请输入学生的出生日期(年月日,以空格隔开):");
scanf("%d%d%d",&File[i].birthday.year,&File[i].birthday.month,&File[i].birthday.day);
toxy(,);
printf("请输入备注:");
scanf("%s",File[i].desc);
}
system("cls");//清屏
toxy(,);
printf("录入完毕,请记得返回保存(*^▽^*)");
toxy(,);
printf("按任意键可返回主菜单!");
getch(); } void output()//信息显示,将学生的基本信息显示到屏幕上
{
system("cls");//清屏
system("color F");//字体颜色为亮白色
int i;
FILE*fp;
toxy(,);
printf("***********学生基本信息*************\n");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
if((fp=fopen("stu","r"))==NULL)//只用读,用r打开stu文件
{
system("cls");
toxy(,);
printf("cannot open file");
toxy(,);
exit();
}
else
{ for(i=;i<N;i++)
{
fread(&File[i],sizeof(struct file),,fp);//从文件中读取数据到File中
if(feof(fp))//判断文件是否读到了最后
break;
printf("%-10s %-10s%-s %7d %d-%d-%d %7s\n",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,+i);
}
memset(File,NULL,sizeof(File));//重置File
}
printf("显示完毕,请按任意键返回主菜单");
getch(); } void save(int n) //信息保存,将录入的学生信息保存到文件中
{
system("cls");//清屏
system("color F");//字体颜色为亮白色
FILE*fp;
fp=fopen("stu","a+");//以追加的方式打开文件,结束时指针停在文件尾
int i;
for(i=;i<n;i++)
{
if(File[i].age==NULL) continue;//避免空白数据
fwrite(&File[i],sizeof(struct file),,fp);//向指定的文件中写入数据
}
fclose(fp);
n=NULL;//重置
memset(File,NULL,sizeof(File));//重置结构体数组File
toxy(,);
printf("档案保存成功!即将返回主菜单……");
Sleep(); } void dele()//信息删除,把不要的学生基本信息删除
{ system("cls");//清屏
system("color F");//字体颜色为亮白色
int i,flag=;//flag是否找到删除学生的标志
char number[];
char name[];
char c;
do
{
toxy(,);
printf("请输入要删除学生的学号和姓名:");
toxy(,);
scanf("%s%s",number,name);
FILE*fp1,*fp2;
fp1=fopen("stu","r+");//为了读和写,用r+打开stu文本文件
fp2=fopen("linshi","w+");//用w+打开一个临时的文本文件
if(fp1==NULL||fp2==NULL)
{
toxy(,);
printf("cannot open file!");
toxy(,);
exit();
}
for(i=;i<N;i++)
{
while(fread(&File[i],sizeof(struct file),,fp1))//从文件中读取数据到File
{
if(feof(fp1))// 判断文件是否读到了最后
break;
if(strcmp(number,File[i].id)==&&strcmp(name,File[i].name)==)//判断要删除的学号和姓名是否与文件数据有相同,若相同则跳过这次循环
{
flag=;
continue;
}
else
{
fwrite(&File[i],sizeof(struct file),,fp2);//将File的信息写入文件
}
}
}
fclose(fp1);
fclose(fp2);
if(system("copy linshi stu")==)//将linshi文件的内容复制覆盖到stu文件,若成功则返回0
{
system("cls");//清屏
system("DEL linshi");//删除linshi文件
system("cls");//清屏
}
if(flag==)//找到删除学生
{ toxy(,);
printf("成功删除该学生,系统将自动帮您更新并保存档案\n");
Sleep();
menu(); }
if(flag==)//无法找到被删除学生
{
toxy(,);
printf("删除失败!学号或姓名输入错误");
toxy(,);
printf("按1返回主菜单,按2重新输入\n");
toxy(,);
while()
{
c=getch();
if(c=='')
{
menu();
}
else if(c=='')
dele();
}
} }while();
}
void change()//修改信息,修改错误的学生信息
{
int sign=;//用来标志密码验证成功或否
int j=;//每次进入此功能,用户有3次验证密码机会
do
{
system("cls");//清屏
system("color F");//字体颜色为亮白色
char str[];
FILE*fp;
if((fp=fopen("password","r"))==NULL)
{
printf("cannot open file\n");
exit();
}
fgets(str,,fp);//从文件中读取密码数据保存到str数组中
fclose(fp);
toxy(,);
printf("进入该功能,须再次验证登陆密码:\n");
toxy(,);
char c;
char password[];
int i=;
for(;;)//此处为输入密码不回显操作
{
c=getch();//输入c
if(c=='\r')//如果输入c为回车,则跳出循环
{
break;
}
if(c=='\b') //如果输入c为删除键
{
printf("\b");
printf(" ");
printf("\b");
}
else
{
password[i]=c;
printf("*");
i++;
}
}
password[i]='\0';//在字符串结尾作结束符标记
if(strcmp(str,password)==)//验证密码是否正确
{
system("cls");//清屏
toxy(,);
printf("验证成功!即将进入修改功能!");
Sleep();
sign=;
break;
}
else
{
toxy(,);
j--;
printf("密码错误!您还有%d次验证机会",j);
Sleep();
}
}while(j>);//验证机会不为0
if(j==)
{
system("cls");
toxy(,);
printf("验证机会已用完,即将返回主菜单……");
Sleep();
menu();
} int select,i;
char number[];
int count=;
if(sign)
{
system("cls");
while(select!=)
{
system("cls");
toxy(,);
printf("--------------1.修改学号-------------");
toxy(,);
printf("--------------2.修改姓名-------------");
toxy(,);
printf("--------------3.修改性别-------------");
toxy(,);
printf("--------------4.修改年龄-------------");
toxy(,);
printf("--------------5.修改出生日期---------");
toxy(,);
printf("--------------6.修改备注 ------------");
toxy(,);
printf("--------------7. 退出 ---------------");
toxy(,);
printf("请输入1~6进行选择:");
toxy(,);
scanf("%d",&select);
FILE*fp1;
toxy(,);
if((fp1=fopen("stu","r+"))==NULL)//为了读和写,用r+打开stu文件
{
system("cls");//清屏
toxy(,);
printf("cannot open file!");
toxy(,);
exit();
}
for(i=;i<N;i++)
{
fread(&File[i],sizeof(struct file),,fp1);//从文件中读取数据到File
if(feof(fp1))//判断文件是否读到了最后
break;
count++;//每次成功从stu文件中读取信息,则学生数据个数加1
}
int flag=;
switch(select)
{
case ://修改学号
system("cls");//清屏
toxy(,);
printf("请输入要修改学生的学号:");
toxy(,);
scanf("%s",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,);
printf("*********************学生基本信息*********************");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,);
printf("重新输入该学生的学号进行修改:");
toxy(,);
scanf("%s",File[i].id);
flag=;
break;
}
}
fclose(fp1);
if(flag==)
{
system("cls");//清屏
toxy(,);
printf("修改成功!系统已自动保存!");
toxy(,);
printf("正在自动跳转到主菜单....");
FILE*fp2;
if((fp2=fopen("stu","w+"))==NULL)//用w+打开stu文件同时清空文件内容
{
printf("cannot open file!");
exit();
}
for(i=;i<count;i++)
fwrite(&File[i],sizeof(file),,fp2);//将File的信息写入stu文件
fclose(fp2);
Sleep();
menu(); }
if(flag==)
{
toxy(,);
printf("该学生不存在!");
toxy(,);
char c;
printf("1.返回上一级 2.返回主菜单");
toxy(,);
c=getch();
if(c=='') break;
if(c=='') menu();
} case ://修改姓名
system("cls");//清屏
toxy(,);
printf("请输入要修改学生的学号:");
toxy(,);
scanf("%s",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,);
printf("*********************学生基本信息*********************");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,);
printf("重新输入该学生的姓名进行修改:");
toxy(,);
scanf("%s",File[i].name);
flag=;
break;
}
}
if(flag==)
{
system("cls");//清屏
toxy(,);
printf("修改成功!系统已自动保存!");
toxy(,);
printf("正在自动跳转到主菜单....");
FILE*fp2;
if((fp2=fopen("stu","w+"))==NULL)//用w+打开stu文件同时清空文件内容
{
printf("cannot open file!");
exit();
}
for(i=;i<count;i++)
fwrite(&File[i],sizeof(file),,fp2);//将File的信息写入stu文件
fclose(fp2);
Sleep();
menu(); }
if(flag==)
{
toxy(,);
printf("该学生不存在!");
toxy(,);
char c;
printf("1.返回上一级 2.返回主菜单");
toxy(,);
c=getch();
if(c=='') break;
if(c=='') menu();
} case ://修改性别
system("cls");//清屏
toxy(,);
printf("请输入要修改学生的学号:");
toxy(,);
scanf("%s",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,);
printf("*********************学生基本信息*********************");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,);
printf("重新输入该学生的性别进行修改:");
toxy(,);
scanf("%s",File[i].sex);
flag=;
break;
}
}
if(flag==)
{
system("cls");//清屏
toxy(,);
printf("修改成功!系统已自动保存!");
toxy(,);
printf("正在自动跳转到主菜单....");
FILE*fp2;
if((fp2=fopen("stu","w+"))==NULL)//用w+打开stu文件同时清空文件内容
{
printf("cannot open file!");
exit();
}
for(i=;i<count;i++)
fwrite(&File[i],sizeof(file),,fp2);//将File的信息写入stu文件
fclose(fp2);
Sleep();
menu(); }
if(flag==)
{
toxy(,);
printf("该学生不存在!");
toxy(,);
char c;
printf("1.返回上一级 2.返回主菜单");
toxy(,);
c=getch();
if(c=='') break;
if(c=='') menu();
}
case ://修改年龄
system("cls");//清屏
toxy(,);
printf("请输入要修改学生的学号:");
toxy(,);
scanf("%s",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,);
printf("*********************学生基本信息*********************");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,);
printf("重新输入该学生的年龄进行修改:");
toxy(,);
scanf("%d",&File[i].age);
flag=;
}
}
if(flag==)
{
system("cls");//清屏
toxy(,);
printf("修改成功!系统已自动保存!");
toxy(,);
printf("正在自动跳转到主菜单....");
FILE*fp2;
if((fp2=fopen("stu","w+"))==NULL)//用w+打开stu文件同时清空文件内容
{
printf("cannot open file!");
exit();
}
for(i=;i<count;i++)
fwrite(&File[i],sizeof(file),,fp2);//将File的信息写入stu文件
fclose(fp2);
Sleep();
menu(); }
if(flag==)
{
toxy(,);
printf("该学生不存在!");
toxy(,);
char c;
printf("1.返回上一级 2.返回主菜单");
toxy(,);
c=getch();
if(c=='') break;
if(c=='') menu();
} case ://修改出生日期
system("cls");//清屏
toxy(,);
printf("请输入要修改学生的学号:");
toxy(,);
scanf("%s",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,);
printf("*********************学生基本信息*********************");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,);
printf("重新输入该学生的出生日期(年 月 日)进行修改:");
toxy(,);
scanf("%d%d%d",&File[i].birthday.year,&File[i].birthday.month,&File[i].birthday.day);
flag=;
}
}
if(flag==)
{
system("cls");//清屏
toxy(,);
printf("修改成功!系统已自动保存!");
toxy(,);
printf("正在自动跳转到主菜单....");
FILE*fp2;
if((fp2=fopen("stu","w+"))==NULL)//用w+打开stu文件同时清空文件内容
{
printf("cannot open file!");
exit();
}
for(i=;i<count;i++)
fwrite(&File[i],sizeof(file),,fp2);//将File的信息写入stu文件
fclose(fp2);
Sleep();
menu(); }
if(flag==)
{
toxy(,);
printf("该学生不存在!");
toxy(,);
char c;
printf("1.返回上一级 2.返回主菜单");
toxy(,);
c=getch();
if(c=='') break;
if(c=='') menu();
} case ://修改备注
system("cls");//清屏
toxy(,);
printf("请输入要修改学生的学号:");
toxy(,);
scanf("%s",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,);
printf("*********************学生基本信息*********************");
toxy(,);
printf(" 学号 姓名 性别 年龄 出生日期 备注");
toxy(,);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
toxy(,);
printf("重新输入该学生的备注进行修改:");
toxy(,);
scanf("%s",&File[i].desc);
flag=;
}
}
if(flag==)
{
system("cls");//清屏
toxy(,);
printf("修改成功!系统已自动保存!");
toxy(,);
printf("正在自动跳转到主菜单....");
FILE*fp2;
if((fp2=fopen("stu","w+"))==NULL)//用w+打开stu文件同时清空文件内容
{
printf("cannot open file!");
exit();
}
for(i=;i<count;i++)
fwrite(&File[i],sizeof(file),,fp2);//将File的信息写入stu文件
fclose(fp2);
Sleep();
menu(); }
if(flag==)
{
toxy(,);
printf("该学生不存在!");
toxy(,);
char c;
printf("1.返回上一级 2.返回主菜单");
toxy(,);
c=getch();
if(c=='') break;
if(c=='') menu();
} case :system("cls");//清屏
default:break;
}
} }
}
void invest()//查询信息,可按学号、姓名、性别、年龄、出生日期查询学生的基本信息
{
system("cls");//清屏
system("color F");//字体颜色为亮白色
int i,x,flag,year,month,day,age;
char number[];
char name[];
char sex[];
while(x!=)
{
system("cls");
toxy(,);
printf("请选择查询功能:\n");
toxy(,);
printf("\t1.查询学号\n");
toxy(,);
printf("\t2.查询姓名\n");
toxy(,);
printf("\t3.查询性别\n");
toxy(,);
printf("\t4.查询出生日期\n");
toxy(,);
printf("\t5.查询年龄\n");
toxy(,);
printf("\t6.退出\n");
toxy(,);
printf("请输入选择:");
scanf("%d",&x);
FILE*fp;
if((fp=fopen("stu","r"))==NULL)//只用读,用r打开stu文件
{
system("cls");//清屏
toxy(,);
printf("cannot open file\n");
toxy(,);
exit();
}
int count=;//用来记录文件中学生数据的个数
for(i=;i<N;i++)
{
fread(&File[i],sizeof(struct file),,fp);//将stu文件信息传到File中
if(feof(fp))//判断文件是否读到了最后
break;
count++;//每次成功从stu文件中读取信息,则学生数据个数加1
}
fclose(fp);
switch(x)
{
case :
system("cls");//清屏
toxy(,);
printf("请输入学号:");
toxy(,);
scanf("%s",number);
system("cls");//清屏
flag=;
toxy(,);
printf("学号为%s的学生信息如下:",number);
for(i=;i<count;i++)
{
if((strcmp(number,File[i].id))==)
{
toxy(,+i);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
flag=;
}
}
if(flag==)
{
toxy(,);
printf("无法找到你要找的学生!");
}
toxy(,+count);
printf("按任意键后可返回……");
getch();
break;
case :
system("cls");//清屏
toxy(,);
printf("请输入姓名:");
toxy(,);
scanf("%s",name);
flag=;
system("cls");//清屏
toxy(,);
printf("姓名为%s的学生信息如下:",name);
for(i=;i<count;i++)
{
if(strcmp(name,File[i].name)==)
{
toxy(,+i);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
flag=;
}
}
if(flag==)
{
toxy(,);
printf("无法找到你要找的学生!");
}
toxy(,+count);
printf("按任意键后可返回……");
getch();
break;
case :
system("cls");//清屏
toxy(,);
printf("请输入性别(男/女):");
toxy(,);
scanf("%s",sex);
system("cls");//清屏
flag=;
toxy(,);
printf("性别为%s的学生信息如下:",sex);
for(i=;i<count;i++)
{
if(strcmp(sex,File[i].sex)==)
{
toxy(,+i);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
flag=;
}
}
if(flag==)
{
toxy(,);
printf("无法找到你要找的学生!");
}
toxy(,+count);
printf("按任意键后可返回……");
getch();
break;
case :
system("cls");//清屏
toxy(,);
printf("请输入出生日期(年 月 日):");
toxy(,);
scanf("%d%d%d",&year,&month,&day);
system("cls");//清屏
flag=;
toxy(,);
printf("出生日期为%d年%d月%d日的学生信息如下:",year,month,day);
for(i=;i<count;i++)
{
if(year==File[i].birthday.year&&year==File[i].birthday.month&&year==File[i].birthday.day)
{
toxy(,+i);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
flag=;
}
}
if(flag==)
{
toxy(,);
printf("无法找到你要找的学生!");
}
toxy(,+count);
printf("按任意键后可返回……");
getch();
break;
case :
system("cls");//清屏
toxy(,);
printf("请输入年龄:");
toxy(,);
scanf("%d",&age);
system("cls");//清屏
flag=;
toxy(,);
printf("年龄为%d的学生信息如下:",age);
for(i=;i<count;i++)
{
if(age==File[i].age)
{
toxy(,+i);
printf("%-10s %-10s%-s %7d %d-%d-%d %7s",File[i].id,File[i].name,File[i].sex,File[i].age,File[i].birthday.year,File[i].birthday.month,File[i].birthday.day,File[i].desc);
flag=;
}
}
if(flag==)
{
toxy(,);
printf("无法找到你要找的学生!");
}
toxy(,+count);
printf("按任意键后可返回……");
getch();
break;
case :system("cls");//清屏
toxy(,);
printf("即将返回主菜单……");
Sleep();
break;
}
}
}
void over()//退出功能,显示退出软件的提示
{
char t;
system("color F");//字体颜色为亮白色
toxy(,);
printf("--------------------------");
toxy(,);
printf("| 您确定要退出吗? |");
toxy(,);
printf("| 1.确定 2.取消 |");
toxy(,);
printf("--------------------------");
while()
{
t=getch(); //输入t
switch(t)
{
case '':
system("cls");//清屏
system("color F");//字体颜色为亮白色
toxy(,);
printf("正在安全退出....");
Sleep(); //暂停1秒
system("cls");
system("color F");//字体颜色为亮白色
toxy(,);
printf("已安全退出软件");
toxy(,);
printf("谢谢使用!");
toxy(,);
printf("bye-bye^_^");
toxy(,);
exit(); break; //终止程序
case '':
menu(); break; //调用函数,进入菜单
default :break;
}
}
} void menu()//菜单功能,显示各种操作功能
{
system("cls");//清屏
fflush(stdin);//清空缓存
char x;
int n;
while(x!='h')
{
system("color F");//字体颜色为亮白色
system("cls");
toxy(,);
printf("-----班级档案管理系统-----");
toxy(,);
printf("| |");
toxy(,);
printf("| a.学生基本信息录入 |");
toxy(,);
printf("| |");
toxy(,);
printf("| b.学生基本信息显示 |");
toxy(,);
printf("| |");
toxy(,);
printf("| c.学生基本信息保存 |");
toxy(,);
printf("| |");
toxy(,);
printf("| d.学生基本信息删除 |");
toxy(,);
printf("| |");
toxy(,);
printf("| e.学生基本信息修改 |");
toxy(,);
printf("| |");
toxy(,);
printf("| f.学生基本信息查询 |");
toxy(,);
printf("| |");
toxy(,);
printf("| g.修 改 密 码 |");
toxy(,);
printf("| |");
toxy(,);
printf("| h.退 出 系 统 |");
toxy(,);
printf("| |");
toxy(,);
printf("--------------------------");
toxy(,);
printf("请输入选择:");
x=getch();
if(x<'A'||x>'H'&&x<'a'||x>'h')//如果输入的范围不是在A-H或a-h
{
toxy(,);
printf("输入选项有误,请重新输入");
Sleep();
continue;
}
if(x>='A'&&x<='H')
x=x+;//将大写转换为小写
switch(x)
{
case 'a':
system("cls");
system("color F");//字体颜色为亮白色
toxy(,);
printf("请输入录入学生人数:");
scanf("%d",&n);
input(n);
break;
case 'b':
output();
break;
case 'c':
save(n);
break;
case 'd':dele();
break;
case 'e':
change();
break;
case 'f':invest();break;
case 'g':change_password();
break;
case'h':
over();
break; default:break;
}
}
} void save_password(char str[])//保存密码到password文本文件中
{
FILE*fp;
fp=fopen("password","w");//打开文本文件
if(fp==NULL)
{
printf("cannot open file");
}
if(fputs(str,fp)!=)//使用fputs将密码写入密码文件,成功则返回0,否则返回非0值
{
printf("write error!");
}
fclose(fp);
} void load()//密码登陆,通过验证读取文件的密码与用户输入的密码是否一致,从而进入系统
{
char _password[];
int p=;//有3次验证密码机会
do
{
system("cls");//清屏
system("color F");//字体颜色为亮白色
int i=;
char password[];
char str[]="hstc2018";//第一次登陆的初始密码
char k;
FILE*fp;
if((fp=fopen("password","a+"))==NULL)
{
printf("cannot open file");
exit();
}
fseek(fp,0L,SEEK_END);//把文件指针移到最后
int size=ftell(fp);//用ftell函数测定文件位置标记的当前位置
rewind(fp);//使文件位置标记重新返回文件的开头
if(size==)//如果文件的长度为空,则说明是第一次登陆使用
{
strcpy(password,str);//将初始密码复制到password数组
save_password(password);//保存密码到文件中
}
else
fgets(password,,fp);//从文件中读取密码
toxy(,);
printf("----------学生档案管理系统---------\n");
toxy(,);
printf("请输入管理者密码:");
for(;;)//此处为输入密码不回显操作
{
k=getch();//输入k
if(k=='\r') //如果输入k为回车,则跳出循环
{
break;
}
if(k=='\b')//如果输入k为删除键
{
if(i>)//如果密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的k既不是删除键,也不是回车键
{
_password[i]=k;
printf("*");
i++;
}
}
_password[i]='\0';//在字符串结尾作结束符标记
if(strcmp(password,_password)==)//判断密码是否输入正确
{
system("cls");//清屏
toxy(,);
printf("正在登陆……");
Sleep();
menu();
}
else
{
toxy(,);
p--;
printf("密码错误!您还有%d次机会",p);
Sleep();
} }while(p>);//验证机会不为0
if(p==)
{
system("cls");//清屏
toxy(,);
printf("机会已用完!");
toxy(,);
}
}
void change_password()//修改密码,需要输入旧密码和新密码,如果旧密码验证正确则可成功修改
{
system("cls");//清屏
system("color F");//字体颜色为亮白色
char str[];
FILE*fp;
if((fp=fopen("password","r"))==NULL)//只用读,用r打开stu文件
{
printf("cannot open file");
exit();
}
fgets(str,,fp);//从fp指向的password文件读入字符串,存放到字符数组str中
fclose(fp);
do
{
system("cls");//清屏
char password[],newpassword[],c,t;
int i=;
toxy(,);
printf("学生管理系统");
toxy(,);
printf("修改密码");
toxy(,);
printf("请输入旧密码:");
for(;;)//此处为密码不回显操作
{
c=getch();
if(c=='\r')//如果输入为回车键
{
break;
}
else if(c=='\b')//如果输入c为删除键
{
if(i>) //如果密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果输入的c既不是删除键,也不是回车键
{
password[i]=c;
printf("*");
i++;
}
}
password[i]='\0';//在字符串结尾作结束符标记
i=;
toxy(,);
printf("请输入新密码:");
for(;;)//此处为输入密码不回显操作
{
c=getch();
if(c=='\r') //如果输入c为回车,则跳出循环
{
break;
}
else if(c=='\b')//如果输入c为删除键
{
if(i>)//如果密码还没完全删除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else
{
newpassword[i]=c;
printf("*");
i++;
}
}
newpassword[i]='\0';//在字符串结尾作结束符标记
if(strcmp(str,password)==)//如果旧密码与原来密码验证成功
{
save_password(newpassword);//保存新密码
system("cls");//清屏
toxy(,);
printf("修改成功,即将返回主菜单……");
Sleep();
menu();
}
else
{
system("cls");//清屏
toxy(,);
printf("-------------------------------------");
toxy(,);
printf("| |");
toxy(,);
printf("| 密码错误!是否继续? |");
toxy(,);
printf("| |");
toxy(,);
printf("| 1.是 2.否 |");
toxy(,);
printf("| |");
toxy(,);
printf("-------------------------------------");
while()
{
t=getch();
if(t=='')
{
system("cls");//清屏
break;
}
else if(t=='')
{
menu();
}
}
}
}while(); }
int main()
{
load();
return ;
}
5.程序的运行效果图


 
    
 
   
6.总结与展望
完成了该课程设计后,对文件的输入输出有了更深一层的了解。还学会了利用windows.h函数库里的system函数去进行
清屏-system("cls"),
延时-Sleep(),
设置字体颜色-system("color X")
删除文件-system("DEL XX")
复制文件-system("copy X1 X2")
虽然较为成功地完成了课程设计,但由于知识和时间的局限性,系统仍然存在缺陷。我认为此系统还可以链接数据库,增加用户权限等,这样能够使系统更具有实用性。
大一C语言课程设计——班级档案管理系统的更多相关文章
- [C基础修炼] [C课程设计]C语言课程设计之图书管理系统
		#include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fp;//定义文件指针fp,指向文 ... 
- c语言课程设计--图书/音乐管理系统
		这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 只能提供一个思 ... 
- 学生管理系统-火车订票系统 c语言课程设计
		概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ... 
- C语言课程设计—图书管理系统
		这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ... 
- C语言课程设计(成绩管理系统)
		C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ... 
- C语言 班级档案管理系统实现
		代码地址:github地址 班级档案管理系统 原题目要求是对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入. 显示.修改.删除.保存等操作的管理. 由于个人需要,我单独将项目改造为 ... 
- Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)
		#Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ... 
- Java课程设计——学生成绩管理系统(201521123003 董美凤)
		Java课程设计--学生成绩管理系统(201521123003 董美凤) 1.团队课程设计博客链接 学生成绩管理系统博客链接 2.个人负责模块或任务说明 信息修改 密码修改 部分界面设计 3.自己的代 ... 
- 记C++课程设计--学生信息管理系统
		C++课程设计--学生信息管理系统 ... 
随机推荐
- WampServer出现You don’t have permission to access/on this server提示
			WampServer出现You don’t have permission to access/on this server提示 本地搭建WampServer,输入http://127.0.0.1访问 ... 
- Ionic run android失败解决方法。
			今天在node.js窗口执行命令行ionic run android时就是报Error executing "adb device":error错,一开始以为是SDK不全,后来以为 ... 
- Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
			摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ... 
- day 69作业
			""" 1.按照上方 知识点总结 模块,总结今天所学知识点: 2.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/t ... 
- OGG 源端与目标端 约束不一致
			需求: 请在生产库执行下面的脚本 --删除主键并新增复合主键 alter table XXXXX drop constraint PK_USERCHNL cascade; ... 
- k8s krew 插件管理工具
			参考:https://github.com/kubernetes-sigs/krew https://int32bit.me/2019/12/05/%E5%88%86%E4%BA%AB%E5%87%A ... 
- js 驼峰命名和下划线互换
			代码走你 // 下划线转换驼峰 function toHump(name) { return name.replace(/\_(\w)/g, function(all, letter){ return ... 
- LCD驱动程序之层次分析
			1.回顾字符设备驱动程序: 字符设备驱动编写的一般步骤: 1)主设备号 2)构造file_operations结构体体 .open = xxxx .read = xxxxx 3)register_ch ... 
- arXiv上传文章latex源码技巧
			<<2019.09.27>>更新 上传PS文件看来也是不行了,一大早收到邮件被arXiv标记为incomplete了.哎,还是老老实实提交Latex source files吧 ... 
- 201871010107-公海瑜《面向对象程序设计(Java)》第四周学习总结
			201871010107-公海瑜<面向对象程序设计(Java)>第四周学习总结 项目 ... 
