记录我在大一第二学期期末做的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语言课程设计——班级档案管理系统的更多相关文章

  1. [C基础修炼] [C课程设计]C语言课程设计之图书管理系统

    #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fp;//定义文件指针fp,指向文 ...

  2. c语言课程设计--图书/音乐管理系统

    这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 这个代码因为配置信息的原因不能直接整个拿去用(o゜▽゜)o☆ 只能提供一个思 ...

  3. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  4. C语言课程设计—图书管理系统

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...

  5. C语言课程设计(成绩管理系统)

    C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ...

  6. C语言 班级档案管理系统实现

    代码地址:github地址 班级档案管理系统 原题目要求是对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入. 显示.修改.删除.保存等操作的管理. 由于个人需要,我单独将项目改造为 ...

  7. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  8. Java课程设计——学生成绩管理系统(201521123003 董美凤)

    Java课程设计--学生成绩管理系统(201521123003 董美凤) 1.团队课程设计博客链接 学生成绩管理系统博客链接 2.个人负责模块或任务说明 信息修改 密码修改 部分界面设计 3.自己的代 ...

  9. 记C++课程设计--学生信息管理系统

                                                                                  C++课程设计--学生信息管理系统     ...

随机推荐

  1. CSS泣鬼神

    博主网站 一.CSS介绍和语法 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 每个CSS样式由两个组成部分:选择器和声明.声明又包括属性和属性值.每个声明 ...

  2. vue底部导航的精准显示

    让底部导航只显示在一级页面: 路由中的写法: import Vue from 'vue' import Router from 'vue-router' //import HelloWorld fro ...

  3. Spring面试专题之aop

    1.背景 aop是编程中非常非常重要的一种思想,在spring项目中用的场景也非常广 2.面试问题 2.1.简单的面试问题 1.什么是aop,aop的作用是什么? 面向切面编程(AOP)提供另外一种角 ...

  4. There is already an open DataReader associated with this Command which must be closed first

    通常出现在嵌套查询数据库(比如在一个qry的遍历时,又进行了数据库查询) 通过在连接字符串中允许MARS可以轻松解决这个问题. 将MultipleActiveResultSets = true添加到连 ...

  5. Flink流式计算

    Structured Streaming A stream is converted into a dynamic table. A continuous query is evaluated on ...

  6. A站(ACFun)爬虫爬取并播放、下载视频(JAVA)

    本文使用的工具有vlc+ffmpeg+phantomjs 一般视频网站的视频地址暴露的方式有两种: 1.html直接暴露 2.通过ajax异步返回. A站使用的方式是第二种.针对第一种方式,直接使用j ...

  7. Collaborative Spatioitemporal Feature Learning for Video Action Recognition

    Collaborative Spatioitemporal Feature Learning for Video Action Recognition 摘要 时空特征提取在视频动作识别中是一个非常重要 ...

  8. 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?

    在使用深度学习框架的过程中一定会经常碰到这些东西,虽然anaconda有时会帮助我们自动地解决这些设置,但是有些特殊的库却还是需要我们手动配置环境,但是我对标题上的这些名词其实并不十分清楚,所以老是被 ...

  9. C#中的函数(三)参数传递及返回值

    接前面二篇,继续开始新的研究 前面忘了说什么是主调函数与被调函数 主调函数:执行调用其它函数语句所在的函数 被调函数:被其它函数所调用的函数 简单说就是一个是发起调用者,另一个是被调用者 写个小例子说 ...

  10. Linux-grep,awk,sed

    grep 参考1:https://www.cnblogs.com/ITtangtang/p/3950497.html sed 参考:https://www.cnblogs.com/wangqiguo/ ...