学生选课管理系统
代码直接跑,有问题可问。
完整代码
- #include "stdafx.h"
- #include <time.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <iostream>
- #include<string>
- #include<fstream>
- #include<map>
- #include<stdio.h>
- #include<math.h>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #include<Windows.h>
- using namespace std;
-
- void c_add();//增加课程
- void c_delete();
- void c_searchm();//查询函数
- void index();//首页
- void Denlu();//登入
- void bye_sys();//退出界面
- void Statistics();
- void Student_Modify();
- int Student_SearchByIndex(char id[]);
-
- struct stu
- {
- char ID[20];//学生学号
- char Name[20];//学生姓名
-
- int c_num;//课程编号
- char c_name[20];//课程名字
- int c_score;//课程学分
- int c_nelepeo;//课程已选人数
- };
- struct stu students[20];
- int num=0;
-
- void index()//首页
- {
- int in;
- do
- {
- printf("\n\n\n");
- printf("\t\t\t\t 学生选课管理系统\n\n");
- printf("\t\t\t1、用户登入*****************************\n\n");
- printf("\t\t\t2、输入数据*****************************\n\n");
- printf("\t\t\t3、查询数据*****************************\n\n");
- printf("\t\t\t4、删除数据*****************************\n\n");
- printf("\t\t\t5、修改数据*****************************\n\n");
- printf("\t\t\t6、统计数据*****************************\n\n");
- printf("\t\t\t7、退出本系统***************************\n");
- printf("\n\t 请选择服务种类:");
- scanf("%d", &in);
- if (in != 1 && in != 2 && in != 3 && in != 4 && in != 5 && in != 6)
- {
- printf("\n\t没有这项服务\t按任意重新选择");
- getchar(); getchar();
- }
- if (in == 7)//退出系统
- {
- bye_sys();
- }
- } while (in != 1 && in != 2 && in != 3 && in != 4 && in != 5 && in != 6);
- switch (in)
- {
- case 1:Denlu(); break;
- case 2:c_add(); break;
- case 3:c_searchm(); break;
- case 4:c_delete(); break;
- case 5:Student_Modify();break;
- case 6:Statistics();break;
- }
- }
-
- void Denlu()//登入
- {
- int name;
- int password;
- for(int i=2;i>=0;i--)
- {
- printf("请输入用户名(提示学号):\n");
- scanf("%d",&name);
- printf("请输入密码(提示学号):\n");
- scanf("%d",&password);
- if(password!=416252)
- {
- if(i==0)
- {
- printf("账号已经被锁定不能进入系统!");
- exit(0);
- }
- else
- printf("密码有误!还有%d次机会!\n",i);
- }
- else
- {
- printf("密码正确,登陆成功!\n");
- break;
- }
- }
- index();
- }
-
- void Statistics()//统计
- {
- int i,j;
- struct stu tmp;
- for (i=0;i<num;i++)
- {
- for (j=1;j<num-i;j++)
- {
- if (students[j-1].c_nelepeo<students[j].c_nelepeo)
- {
- tmp=students[j-1];
- students[j-1]=students[j];
- students[j]=tmp;
- }
- }
- }
- printf("\t\t统计成功");
- index();
- }
-
- int Student_SearchByIndex(char id[])
- {
- int i;
- for (i=0;i<num;i++)
- {
- if (strcmp(students[i].ID,id)==0)
- {
- return i;
- }
- }
- return -1;
- }
-
- /*修改信息*/
- void Student_Modify()
- {
- while(1)
- {
- char id[20];
- int index;
- printf("请输入要修改的学生的学号:");
- scanf("%s",&id);
- getchar();
- index=Student_SearchByIndex(id);
- if (index==-1)
- {
- printf("学生不存在!\n");
- }
- else
- {
- printf("-- 请输入新值--\n");
- printf("请输入学生学号:");
- scanf("%s",&students[index].ID);
- getchar();
- printf("请输入学生姓名:");
- scanf("%s",&students[index].Name);
- getchar();
- printf("请输入课程编号:");
- scanf("%d",&students[index].c_num);
- getchar();
- printf("请输入课程名字:");
- scanf("%s",&students[index].c_name);
- getchar();
- printf("请输入课程学分:");
- scanf("%f",&students[index].c_score);
- getchar();
- printf("请输入课程已选人数:");
- scanf("%f",&students[index].c_nelepeo);
- getchar();
- }
- printf("是否继续?(1/0)");
- if (getchar()=='0')
- {
- break;
- }
- }
- index();
- }
-
- void bye_sys()//退出界面
- {
- exit(0);
- }
-
- void c_searchm()//查询数据
- {
- int id, i = 0, j, inp, k;
- int flag = 0;
- FILE* fp;
- //struct stu coursesear[20];
- //struct stu students[20];
- if ((fp = fopen("course.dat", "rb")) == NULL) //判断课程信息是否存在
- {
- system("cls");
- printf("\n\n\t 课程不存在\t 按任意键返回");
- getchar(); getchar();
-
- }
- else//存在的话循环读取文件中的信息直到文件指针到文件尾部
- {
- do
- {
- fread(&students[i], sizeof(struct stu), 1, fp);
- i = i + 1;
- } while (!feof(fp));
- fclose(fp);
- }
- system("cls");
- printf("\n\n\t\t\t 请输入你要查询的课程编号: ");
- scanf("%d", &id);
- do//检查输入是否符合要求
- {
- for (j = 0; j < i - 1; j++)
- {
- if (id == students[j].c_num)
- {
- flag++;
- k = j;
- }
- }
- if (flag == 1)
- {
- system("cls");
- printf("\n\n\t 学生学号:%s\n", students[k].ID);
- printf("\n\n\t 学生名字:%s\n", students[k].Name);
- printf("\n\n\t 课程编号:%d\n", students[k].c_num);
- printf("\n\n\t 课程名字:%s\n", students[k].c_name);
- printf("\n\n\t 课程学分:%d\n", students[k].c_score);
- printf("\n\n\t 课程已选人数:%d\n", students[k].c_nelepeo);
- getchar(); getchar();
- printf("\n\n\t1.回目录继续查询\t2.退出查询系统\n");
- printf("请选择: ");
- scanf("%d", &inp);
- switch (inp)
- {
- case 1:c_searchm();
- case 2:index();
- default:
- {
- printf("\n\t 没有这项服务\t 请按任意键重新输入");
- getchar(); getchar();
- }
- }
- }
- else
- {
- system("cls");
- printf("\n\n\t 不存在对应记录\n");
- printf("\n\n\t1.回目录继续查询\t2.退出查询系统\n");
- printf("请选择: ");
- scanf("%d", &inp);
- switch (inp)
- {
- case 1:c_searchm();
- case 2:index();
- default:
- {
- printf("\n\t 没有这项服务\t 请按任意键重新输入");
- getchar(); getchar();
- }
- }
- }
- } while (inp != 1);
- }
-
- void c_add()//插入数据
- {
- int i = 0, j, inp;
- FILE* fp;
- struct stu student_new;
- //struct stu students[20];
- system("cls");
- printf("\n\n\t\t 请输入信息");
- printf("\n\n\t\t1.学生学号:");
- scanf("%s", &student_new.ID);
- printf("\n\n\t\t2.学生名字:");
- scanf("%s", &student_new.Name);
- printf("\n\n\t\t3.课程编号:");
- scanf("%d", &student_new.c_num);
- printf("\n\n\t\t4.课程名称:");
- scanf("%d", &student_new.c_name);
- printf("\n\n\t\t5.课程学分:");
- scanf("%d", &student_new.c_score);
- printf("\n\n\t\t5.课程已选人数:");
- scanf("%d", &student_new.c_nelepeo);
- if ((fp = fopen("course.dat", "rb")) != NULL)
- {
- do
- {
- fread(&students[i], sizeof(struct stu), 1, fp);
- i = i + 1;
- } while (!feof(fp));
- fclose(fp);
- for (j = 0; j <= i - 1; j++)
- if (student_new.c_num == students[j].c_num)
- {
- system("cls");
- printf("\n\n\t\t\t 对不起,这个编号已经使用过\n\n\t\t 按任意键返回管理菜单");
- getchar(); getchar();
- break;
- }
- }
- if ((fp = fopen("course.dat", "rb")) == NULL)
- {
- fp = fopen("course.dat", "wb");
- }
- else
- {
- fclose(fp);
- fp = fopen("course.dat", "ab");
- }
- fwrite(&student_new, sizeof(struct stu), 1, fp);
- fclose(fp);
- printf("\n\n\t\t 信息输入完毕\t 按任意键继续");
- num++;
- getchar(); getchar();
- do
- {
- system("cls");
- printf("\n\n\t\t1.继续输入");
- printf("\n\n\t\t2.返回主页");
- printf("\n\n\t\t 请选择");
- scanf("%d", &inp);
- if (inp != 1 && inp != 2)
- {
- printf("输入不符合要求\t 按任意键重新选择");
- getchar(); getchar();
- }
- } while (inp != 1 && inp != 2);
- switch (inp)
- {
- case 1:c_add(); break;
- case 2:index(); break;
- }
- }
-
- void c_delete()//查询后删除
- {
- FILE* fp;
- int i = 0, j, n, k, flag = 0;
- //struct stu courses[20];
- printf("\n\n\t\t 请输入你要删除的课程编号: ");
- scanf("%d", &n);
- if ((fp = fopen("course.dat", "rb")) != NULL)
- {
- do
- {
- fread(&students[i], sizeof(struct stu), 1, fp);
- i = i + 1;
- } while (!feof(fp));
- fclose(fp);
- }
- else
- {
- printf("\n\n\t\t 不存在任何课程\t 按任意键返回");
- getchar(); getchar();
-
- }
- for (j = 0; j < i - 1; j++)
- {
- if (students[j].c_num == n)
- {
- flag = 1;
- fp = fopen("course.dat", "wb");
- for (k = 0; k < j; k++)
- fwrite(&students[k], sizeof(struct stu), 1, fp);
- fclose(fp);
- fp = fopen("course.dat", "ab");
- for (k = j + 1; k < i - 1; k++)
- {
- fwrite(&students[k], sizeof(struct stu), 1, fp);
- }
- printf("\n\n\t\t 记录已删除! \t 按任意键返回\n\t\t");
- getchar(); getchar();
-
- fclose(fp);
- }
- }
- if (flag == 0)
- {
- printf("\n\n\t\t 不存在对应的课程\t 按任意键返回");
- getchar(); getchar();
- }
- }
-
- int main()
- {
- index();
- return 0;
- }