📄 students.c
字号:
/*////////////////////////////////////////////////////
Author:
Tiem: 2007-10-09
Files Name: Students.c
Functions: 主要是学生使用系统功能函数的实现部分
/////////////////////////////////////////////////////*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "Structs.h"
#include "Functions.h"
/*修改密码*/
void stuAlterSecret()
{
USER user,user1;
FILE *fp;
int i;
char username[15];
if ((fp=fopen("stuUsers.dat","rb+"))==NULL)
{
printf("\t不能建立stuUsers.dat文件\n");
return;
}
fseek(fp,0,2);
if (ftell(fp)>0)
{
rewind(fp);
printf("\n\t\t请输入要修改的用户名:");
scanf("%s",username);
rewind(fp);
while (1)
{
fread(&user,sizeof(USER),1,fp);
if (feof(fp) || strcmp(user.userName,username)==0) break;
i++;
}
if (!feof(fp))
{
printf("\n\t\t***************用户信息***************\n");
printf("\n\t\t用户名:\t"); //获得用户名
printf("\t%s\t\n",user.userName);
printf("\n\t\t密码:\t"); //获得旧密码
printf("\t%s\n",user.Password);
printf("\n\t\t请输入修改过的密码: "); //获得新密码
scanf("%s",&user1.Password);
}
else
{
printf("\n\t\t-------------查无此人!-------------\n");
system("pause");
}
strcpy(user1.userName,user.userName);
fseek(fp,-(long)sizeof(USER),SEEK_CUR); //指向当前记录
fwrite(&user1,sizeof(USER),1,fp); //用新记录覆盖当前记录
printf("\n\t\t-----修改密码成功!-----");
system("pause");
SMenu();
fclose(fp);
}
else
{
printf("\n\t\t------------无用户记录!-------------\n");
system("pause");
fclose(fp);
}
}
/*学生选课*/
void stuSelectCouse()
{
char c,c1,num1[5],num2[5];
int i=0,flag=0;
char num[9];
FILE *fp,*fp1; //指向文件的指针
STUDENT stud,nstud;
COURSE cour;
admOutputCourse();
printf("\n\n\t\t请输入所选课程的编号: ");
scanf("%s",num1);
strcmp(num2,num1);
if ((fp1=fopen("Courses.dat","rb+"))==NULL) //查找是否存在此编号的课程
{
printf("\t\t不能建立Courses.dat文件\n");
return;
}
rewind(fp1); //将文件指针移到文件开头
while (!feof(fp1)) //查找此编号的课程是否存在
{
fread(&cour,sizeof(COURSE),1,fp1);
if (strcmp(cour.courseNum,num1)==0)
flag=1;
}
fclose(fp1);
if (flag) //存在此编号的课程后,允许学生选择
{
printf("\n\t\t请输入您的学号: ");
scanf("%s",num);
if ((fp=fopen("Students.dat","rb+"))==NULL)
{
printf("\n\t\t不能建立Students.dat文件\n");
return;
}
rewind(fp);
while (!feof(fp)) //查找此学号的学生是否存在
{
fread(&stud,sizeof(STUDENT),1,fp);
if (feof(fp) || strcmp(stud.stuNum,num)==0)
break;
i++ ;
}
if (!feof(fp)) //存在此学号的学生,则允许保存选择的课程信息
{
strcmp(nstud.stuNum,stud.stuNum);
nstud.stuAge=stud.stuAge;
strcpy(nstud.classNum,stud.classNum);
strcpy(nstud.stuSex,stud.stuSex);
strcpy(nstud.stuName,stud.stuName);
strcmp(nstud.courseNum,num2);
fseek(fp,-(long)sizeof(STUDENT),SEEK_CUR); //指向修改记录开头
fwrite(&nstud,sizeof(STUDENT),1,fp);
printf("\t\t写入成功!\n");
fclose(fp);
}
else //不存在重复学号时,将新信息写入文件中
{
printf("\n\t\t 该学号不存在!\n");
printf("\n\t\t要继续,请输入y或Y,否则输入n或N ? ");
scanf("%s",&c);
switch (c)
{
case 'y':
case 'Y':
stuSelectCouse();
break;
case 'n':
case 'N':
break;
}
}
}
else
{
printf("\n\t\t 此编号的课程不存在!\n\n");
printf("\n\t\t 要继续选课,请输入y或Y,否则输入n或N? ");
scanf("%s",&c1);
switch (c1)
{
case 'y':
case 'Y':
stuSelectCouse();
break;
case 'n':
case 'N':
break;
}
}
}
/*查询选课信息*/
void stuSearchCouse()
{
FILE *fp;
COURSE course[20];
int i,t,n;
char num[5];
if((fp=fopen("Courses.dat","r"))==NULL)
{
printf("\n\t不能打开文件Courses.dat\n");
printf("\n\t按任意键继续.........");
getch();
}
for(n=0;!feof(fp) && fread(&course[n],sizeof(COURSE),1,fp);n++);
printf("\n\t\t请输入要查找的课程号:");
scanf("%s",&num);
rewind(fp);
if(!feof(fp))
{
for(i=0;i<=n;i++)
{
if (strcmp(course[i].courseNum,num)==0)
{
printf("\n课程号\t\t课程名称\t\t所选人数\t授课教师\t上课地点\t课程学分\n");
printf(" %s\t\t%s\t%d\t%s\t%s\t%d\n",course[i].courseNum,course[i].courseName,course[i].selectCount,course[i].Teacher,course[i].Classrom,course[i].Credit);
printf("-------------------------------------------------------------\n");
t=1;
printf("\n按任意键继续.........");
getch();
break;
}
}
}
if(t!=1)
{
printf("\n\t\t没有此编号的课程!\n");
system("cls");
printf("\n\t\t按任意键继续.........");
getch();
}
fclose(fp);
}
/*查询成绩信息*/
void stuSearchScore()
{
FILE *fp;
DEGREE degree[20];
int i,t,n;
char num[9];
if((fp=fopen("Degrees.dat","r"))==NULL)
{
printf("\t\t不能打开文件Degrees.dat\n");
printf("\n\t\t按任意键继续.........");
getch();
}
printf("\n\t\t查找学生成绩信息!\n");
for(n=0;!feof(fp) && fread(°ree[n],sizeof(DEGREE),1,fp);n++);
printf("\n\t\t请输入要查找的学生号:");
scanf("%s",&num);
rewind(fp);
if(!feof(fp))
{
for(i=0;i<=n;i++)
{
if (strcmp(degree[i].stuNum,num)==0)
{
printf("\n课程号\t\t考试成绩\t\t平时成绩\n");
printf(" %s\t\t%5.2f\t\t%5.2f\n",degree[i].courseNum,degree[i].examDegr,degree[i].commonDegr);
printf("-------------------------------------------------------------\n");
t=1;
printf("\n按任意键继续.........");
getch();
break;
}
}
}
if(t!=1)
{
printf("\n\t\t查无此人!\n");
printf("\n\t\t按任意键继续.........");
getch();
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -