⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 students.c

📁 学生选课系统
💻 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(&degree[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 + -