#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define SIZE_STU 10
//界面函数声明//
void stu_operate(void);
void home(void);
//学生信息函数声明
void input_stu(void);
void search_stu(void);
void search_stu_id(void);
void show_stu(void);
void edit_stu(void);
void renew_stu(void);
void delete_stu(void);
//学生信息结构体//
struct student_info {
char stu_ID[9];
char stu_name[9];
char sex[9];
char age[9];
}stu[SIZE_STU];
int i = -1;//学生
int main(void)
{
home();
return 0;
}
//欢迎界面//
void home(void)
{
printf("\n-------------------------欢迎进入选课系统!----------------------");
int h;
printf("\n\n 请选择你要进行的操作:");
printf("\n\n 1.学生操作");
scanf("%d",&h);
system("cls");
switch(h){
case 1:
stu_operate();
break;
default:
system("cls");
printf("BYE!");
break;
}
}
//对学生记录进行操作
void stu_operate(void) {
printf("\n-------------------------欢迎进入选课系统!----------------------");
printf("\n\n 请选择你要对学生记录进行的操作:");
printf("\n\n 1.添加");
printf("\n 2.查询");
printf("\n 3.显示");
printf("\n 4.返回主页面");
printf("\n ");
printf("\n 请输入:");
int i;
scanf("%d",&i);
system("cls");
switch(i){
case 1://添加学生信息
input_stu();
break;
case 2://查询学生信息
search_stu();
break;
case 3://显示所有学生信息
show_stu();
break;
case 4:
home();
break;
}
}
//学生信息录入
void input_stu(void){
char flag;
FILE * fp;
if ((fp=fopen("student.dat","wb"))==NULL);
flag = fgetc(fp);
if(flag==EOF){
fprintf(fp, "学号\t姓名\t性别\t年龄\n");
}
fclose(fp);
fp=fopen("student.dat", "a+");
if (fp==NULL) {
printf("打开失败!");
system("cls");
stu_operate();
}
printf("学号\t姓名\t性别\t年龄\n");
while (1) {
i++;
scanf("%s %s %s %s",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age);
//判断是否重复//
int h;
for(h=0;h<i;h++){
if(i==0)
break;
//判断两字符串大小,相同返回0
if (strcmp(stu[h].stu_ID, stu[i].stu_ID)==0) {
printf("该学号已存在!\n");
scanf("%s %s %s %s",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age);
h=-1;
}
}
fprintf(fp,"%s\t%s\t%s\t%s\n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age);
printf("录入完成,继续请按a\n");
printf("按任意键继续!\n");
fflush(stdin);
scanf("%c",&flag);
fclose(fp);
if(flag!='a')break;
fp=fopen("student.dat", "a");
}
renew_stu();
system("cls");
stu_operate();
}
//学生信息查询
void search_stu(void){
system("cls");
char id[9];
printf("\n请输入学号:");
fflush(stdin);
scanf("%s",id);
int h;
for(h = 0;h<=i;h++){
if(strcmp(stu[h].stu_ID, id)==0){
system("cls");
printf("查找成功!");
printf("\n\n\t学号\t姓名\t性别\t年龄");
printf("\n\t-----------------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
system("pause");
system("cls");
stu_operate();
}
}
system("cls");
printf("没有此学号!\n");
system("pause");
system("cls");
stu_operate();
}
//显示所有学生信息
void show_stu(void){
int h;
if(i == -1){
printf("\n还没有录入信息!\n");
system("pause");
system("cls");
stu_operate();
}
system("cls");
printf("\n\n\t学号\t姓名\t性别\t年龄");
printf("\n\t---------------------------------------------------------");
for(h = 0;h <= i;h++){
printf("\n\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
}
fflush(stdin);
printf("\n\t1.修改");
printf("\n\t2.删除");
printf("\n\t3.返回");
printf("\n\n 选择要进行的操作:");
int flag;
fflush(stdin);
scanf("%d",&flag);
switch(flag){
case 1:
edit_stu();
break;
case 2:
delete_stu();
break;
default:
system("cls");
stu_operate();
break;
}
}
//编辑学生信息
void edit_stu(void){
printf("\n输入需要编辑的学生的学号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
system("cls");
printf("\n\n\t学号\t姓名\t性别\t年龄");
printf("\n\t---------------------------------------------------------");
printf("\n\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
printf("\n这是修改前的数据,请依次输入修改值:\n\t");
fflush(stdin);
scanf("%s %s %s %s",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
int k;
for(k = 0;k <= i;k++){
if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){
if(k==h){
continue;
} else {//学号不唯一
printf("\n此学号已存在!重新输入学号:");
fflush(stdin);
scanf("%s",stu[h].stu_ID);
k = -1;
}
}
}
//将修改信息写入文件//
renew_stu();
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
}
printf("\n此学号不存在!\n");
system("pause");
system("cls");
stu_operate();
}
//删除学生信息
void delete_stu(void){
printf("\n输入需要编辑的学生的学号:");
char id[10];
getchar();
scanf("%s",id);
int h;
for(h = 0;h <= i;h++){
if(strcmp(stu[h].stu_ID,id)==0){//找到需要编辑的行
system("cls");
//检查是否选课了
int a;
for(a = 0;a <= x;a++){
if(h==sel[a].s){//选课了则将对应课程记录减1,以及选课数组减1
delete_sel(a);
a = -1;
x--;
continue;
}
}
//如果只有一条记录
if(i==0){
i = -1;
renew_stu();
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
int k;
for(k = h+1;k <= i;k++,h++){//将数组直接向前移动
strcpy(stu[h].stu_ID,stu[k].stu_ID);
strcpy(stu[h].stu_name,stu[k].stu_name);
strcpy(stu[h].sex,stu[k].sex);
strcpy(stu[h].age,stu[k].age);
}
renew_stu();
i--;
system("cls");
printf("修改成功!\n");
system("pause");
system("cls");
stu_operate();
}
}
printf("\n此学号不存在!\n");
system("pause");
system("cls");
stu_operate();
}
void renew_stu(void){
FILE * fp;
fp = fopen("student.dat","w+");
if(fp == NULL){
printf("\n打开文件失败,无法保存至文件。\n");
fclose(fp);
return ;
}
fprintf(fp,"学号\t姓名\t性别\t年龄\n");
if(i == -1){
fclose(fp);
return;
}
int h;
for(h = 0;h <= i;h++){
fprintf(fp,"%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age);
}
fclose(fp);
}