C语言课程设计——学生学籍管理系统
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 100 /*存储100个学生的学籍信息*/
int flag; /*标记是否登录*/
struct date /*出生日期*/
{
int year;
int month;
int day;
};
struct student
{
char num[20];/*学号*/
char name[25];/*姓名*/
char 易做图[10];/*性别*/
struct date birthday;/*出生年月*/
int age;/*年龄*/
char addr[50];/*籍贯*/
char dept[50]; /*系别*/
char major[30]; /*专业*/
char classs[30]; /*班级*/
char phone[20];/*电话*/
}stu[N];
void login() /*登录*/
{
void menu();
system("cls");
if(flag)
{
printf(" 已经登录!\n");
printf("Press any key to continue…\n");
getchar();
getchar();
system("cls");
menu();
}
int load();
int n,i,m,w;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))!=NULL) /*不是空文件*/
n=load(); /*打开文件*/
else
n=0;
struct student s;
char password[20];
int d,q;
printf("\n\t请选择登录身份:1.管理员 2.用户 [ ]\b\b");
scanf("%d",&d);
if(d==1)
{
printf("\n\t\t\t请输入密码:");
getchar();
int j=0;
while(1)
{
password[j]=getch();
if(password[j]=='\r')
break;
printf("*");
j++;
}
password[j]='\0';
if(!strcmp(password,"930322")) /*判断密码是否正确*/
{
flag=1;
printf("\n\t登录成功!\n");
printf("\tPress [ Enter ] key to continue…");
getchar();
system("cls");
menu();
}
if(!flag)
{
printf("\t\n密码错误!\n");
printf("What do you want to do next? 1.继续登录 2.返回菜单 [ ]\b\b");
scanf("%d",&q);
if(q==1) /*继续登录*/
{
system("cls");
login();
}
else if(q==2) /*返回主菜单*/
{
system("cls");
menu();
}
}
}
else
{
printf("\n\t\t\t用户名:");
scanf("%s",s.name);
printf("\t\t\t密码:");
int j=0;
while(1)
{
password[j]=getch();
if(password[j]=='\r')
break;
printf("*");
j++;
}
password[j]='\0';
flag=0; /*未登录时flag=0*/
for(i=0;i<n;i++)
if(!strcmp(s.name,stu[i].name)&&!strcmp(s.name,password))
{
flag=1; /*登录成功flag=1*/
break;
}
if(flag)
{
printf("\n\t登录成功!\n");
printf("\tPress any key to continue…\n");
getchar(); getchar();
system("cls");
menu(); /*登录成功后返回主菜单*/
}
else
{
m=0; /*设置m是为了避免陷入 登录失败时 跳不出登录界面*/
w=1; /*设置w是为了避免输出多次 “用户不存在”*/
int q; /*q为选项*/
do
{
if(w>0)
printf("用户名不存在或密码错误!\n"); /*第一次登录时输入不存在的用户时显示*/
printf("What do you want to do next? 1.继续登录 2.返回菜单 [ ]\b\b");
scanf("%d",&q);
if(q==1) /*继续登录*/
{
login();
m=1;
}
else if(q==2) /*返回主菜单*/
{
system("cls");
menu();
m=1;
}
else
{
printf("选择错误!请重新选择:\n");
w=0;
}
}while(m==0);
}
}
}
void printf_one(int k) /*输出一个学生的信息*/
{
system("color 4e");
printf("学号:%s\n",stu[k].num);
printf("姓名:%s\n",stu[k].name);
printf("性别:%s\n",stu[k].易做图);
printf("出生年月:%d/%d/%d\n",stu[k].birthday.year,stu[k].birthday.month,stu[k].birthday.day);
printf("年龄:%d\n",stu[k].age);
printf("籍贯:%s\n",stu[k].addr);
printf("系别:%s\n",stu[k].dept);
printf("专业:%s\n",stu[k].major);
printf("班级:%s\n",stu[k].classs);
printf("电话:%s\n",stu[k].phone);
}
void printf_n(int n) /*浏览时输出所有学生的信息*/
{
system("color 2e");
int j,i=1;
for(j=0;j<n;j++)
{
printf("第%d个学生:\n",i++);
printf_one(j);
printf("\n");
}
getchar();
}
int load() /*打开文件,读取里面的数据*/
{
FILE *fp;
int i;
if((fp=fopen("D:\\file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只允许读数据*/
{
printf("\n文件不存在!请输入:\n");
return 0;
}
for(i=0;!feof(fp);i++) /*处理到文件结尾*/
fread(&stu[i],sizeof(struct student),1,fp); /*fread(buffer,size,cout,fp)将磁盘文件中的一批数据作为一个整体一次性读取出来,
buffer指定数据块位置,sizeof数据块字节数,count读取次数,fp指向源磁盘文件*/
fclose(fp);
return(i-1);
}
void input(int k) /*输入学生信息*/
{
getchar();
printf("学号:"); gets(stu[k].num);
printf("姓名:"); gets(stu[k].name);
printf("性别:"); gets(stu[k].易做图);
printf("出生年月:"); scanf("%d/%d/%d",&stu[k].birthday.year,&stu[k].birthday.month,&stu[k].birthday.day);
printf("年龄:"); scanf("%d",&stu[k].age); getchar();
printf("籍贯:"); gets(stu[k].addr);
printf("系别:"); gets(stu[k].dept);
printf("专业:"); gets(stu[k].major);
printf("班级:"); gets(stu[k].classs);
printf("电话:"); gets(stu[k].phone);
}
void save(int n) /*保存学生信息*/
{
void exit();
FILE *fp;
int i;
if((fp=fopen("D:\\file.txt","wb"))==NULL) /*只打开或建立一个二进制文件,只允许写数据*/
{
printf("\nCan not open file!\n");
exit();
}
for(i=0;i<n;i++)
if(stu[i].name[0]!='\0')
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) /*将一批数据作为一个整体一次性写入磁盘文件*/
printf("文件写入错误!\n");
fclose(fp);
}
void printf_back()/*添加学生信息后显示的“是浏览还是返回”*/
{
int w,k=0;
void browse();
void menu();
printf("\n\n\t^_^.插入成功. ^_^\n\n");
do
{
printf("What do you want to do next?\n\n\t1).浏览所有\t2).返回: [ ]\b\b");
scanf("%d",&w);
if(w==1)
{
system("cls");
browse();
}
else if(w==2)
{
system("cls");
menu();
}
else
printf(" 选择错误!请重新选择!\n");
}while(k==0);
}
void insert() /*添加学生信息*/
{
int i,n,k,t;
FILE *fp;
if((fp=fopen("D:\\file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只允许读数据*/
{
printf("How many people do you want to add(1-%d)?:",N-1);
n=0;
}
else
{
n=load();
printf("How many student do you want to insert (1-%d)?:",N-n-1);
}
scanf("%d",&t);
k=n+t;
for(i=n;i<k;i++)
{
printf("\n输入第 %d 个学生学籍信息.\n",i-n+1);
input(i);
}
save(k); /*保存所有学生的信息*/
printf_back();
}
void deleter() /*删除*/
{
void menu();
if(!flag)
{
printf("\n\n\t请先登录!\n");
printf("\n\t请按 Enter 键进入登录界面!");
getchar();
getchar();
login();
}
else
{
struct student s;
int i,n,k,w0,w1;
n=load();
do
{
k=-1;
//printf_n(n); /*删除之前先显示所有学生的信息*/
do
{
printf("\n\n请输入您想要删除的学生的姓名!\nName:");
scanf("%s",s.name);
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0)
{
k=i;
s=stu[i];
}
if(k==-1)
{
int m;
printf("\n\n没有这个学生的信息!\n");
printf("What do you want to do next? 1.继续输入 2.返回主菜单 [ ]\b\b");
scanf("%d",&m);
if(m==1)补充:软件开发 , C语言 ,