代码原创,是学生选课管理系统,含链表的增,删,改,查,且保存到文件中,文件的读写和拿取,注册密码,用户名的保存,读取。 本代码是验收课设和大作业的时候创作的,大家可以白嫖,记得给个关注,有问题评论区见,大家一起讨论
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int r=1; //quan ju bbianliang
void ws();
struct student{
char bianhao[10] ;
char name[10];
char sex[10];
char csny[10];
char xueli[10];
char zhiwu[10];
int all;
char zhuzhi[10];
char phone[100];
char bumen[10];
struct student *next;
};
typedef struct student stu;
stu ss[10000];
stu *head=(stu *)malloc(sizeof(stu));
void setline(stu *head);
void insert(stu *head);
void shanchu(stu *head);
class Worker{
public:
setline(stu *head);//建立链表,存储课程
dayin(stu *head);//浏览链表,查看课程信息
insert(stu *head);//增加课程信息
shanchu(stu *head);//删除课程
serch(stu *head);//查找课程
gengxin(stu *head);//更新课程信息
filesave(stu *head);//保存课程信息到文件中
loadfile(stu *head);//冲文件中读取课程信息
menu();//菜单函数
zhuce();//注册函数
denglu();//登录函数
jiegouti();
private:
};
class Student{
public:
xuanke();//选课函数
zhuce();//注册函数
denglu();//登录函数
private:
};
int Worker::setline(stu *head){
r=2;
printf("想保存几门课");
int N;
scanf("%d",&N);
int b;
stu *p,*q;
p=head;
for(int i=1;i<=N;i++){
system("cls");
printf("请输入课程信息:\n");
q=(stu *)malloc(sizeof(stu));
printf("课程名称\n");
scanf("%s",q->name);
printf("课程性质\n");
scanf("%s",q->bianhao);
printf("学分\n");
scanf("%d",&q->all);
printf("总学时\n");
scanf("%s",q->bumen);
printf("授课学时\n");
scanf("%s",q->sex);
printf("上机学时\n");
scanf("%s",q->csny);
printf("开课学期\n");
scanf("%s",q->xueli);
printf("课程编号\n");
scanf("%s",q->zhuzhi);
printf("授课老师联系电话\n:");
scanf("%s",q->phone);
printf("\n");
p->next = q;
p = q;
q->next=NULL;
}
q->next==NULL;
}
int Worker::dayin(stu *head){
if(r==1){
printf("请先输入课程信息,否则错误");
}
else{
stu *q;
q=head->next;
if(q==NULL)
{
printf("此系统中无课程记录!\n");
exit(0);
}
while(q->next!=NULL){
printf("课程名称\n");
printf("%s",q->name);
printf("课程性质\n");
printf("%s",q->bianhao);
printf("学分\n");
printf("%d",q->all);
printf("总学时\n");
printf("%s",q->bumen);
printf("授课学时\n");
printf("%s",q->sex);
printf("上机学时\n");
printf("%s",q->csny);
printf("开课学期\n");
printf("%s",q->xueli);
printf("课程编号\n");
printf("%s",q->zhuzhi);
printf("授课老师联系电话\n:");
printf("%s",q->phone);
printf("\n");
q=q->next;
}
}
}
int Worker::insert(stu *head){
if(r==1){
printf("请先输入员工信息,否则错误");
}
else{
stu *p,*q,*w;
p=head->next;
q=head;
w=(stu *)malloc(sizeof(stu));//存储信息
printf("请输入插入员工信息(后方),输入第几个员工\n");
printf("请输入插到第几个员工的后方");
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
p=p->next;
q=q->next;
}
printf("姓名\n");
scanf("%s",w->name);
printf("编号");
scanf("%s",w->bianhao);
printf("总工资");
scanf("%d",&w->all);
printf("职务");
scanf("%s",w->bumen);
printf("性别");
scanf("%s",w->sex);
printf("出生年月");
scanf("%s",w->csny);
printf("学历");
scanf("%s",w->xueli);
printf("地址");
scanf("%s",w->zhuzhi);
printf("电话");
scanf("%s",w->phone);
q->next=w;
w->next=p;
}
}
int Worker::shanchu(stu *head){
if(r==1){
printf("请先输入课程信息,否则错误");
}
else{
char name[10];
stu *p,*q,*w;
w=(stu *)malloc(sizeof(stu));
q=head;
p=head->next;
printf("请输入删除课程的名称:\n");
scanf("%s",w->name);
while(p!=NULL){
if(strcmp(w->name,p->name)==0){
q->next=p->next;
free (p);
break;
}
else{
q=q->next;
p=p->next;
}
}
}
}
int Worker::serch(stu *head){
if(r==1){
printf("请先输入链表,否则错误");
}
else{
stu *p;
char name[10];
p=head->next;
printf("请选择类别 1:课程性质|||| 除1以外为按查学分");
int n;
scanf("%d",&n);
if(n==1){
printf("请输入查找的课程名称\n");
scanf("%s",name);
while(p!=NULL){
if(strcmp(name,p->name)==0){
printf("课程名称\n");
printf("%s",p->name);
printf("课程性质\n");
printf("%s",p->bianhao);
printf("学分\n");
printf("%d",p->all);
printf("总学时\n");
printf("%s",p->bumen);
printf("授课学时\n");
printf("%s",p->sex);
printf("上机学时\n");
printf("%s",p->csny);
printf("开课学期\n");
printf("%s",p->xueli);
printf("课程编号\n");
printf("%s",p->zhuzhi);
printf("授课老师联系电话\n:");
printf("%s",p->phone);
break;
}
else{
p=p->next;
}
}
}
else{
printf("请输入所查询课程的学分\n");
int nn;
scanf("%d",&nn);
while(p!=NULL){
if(nn==p->all){
printf("课程名称\n");
printf("%s",p->name);
printf("课程性质\n");
printf("%s",p->bianhao);
printf("学分\n");
printf("%d",p->all);
printf("总学时\n");
printf("%s",p->bumen);
printf("授课学时\n");
printf("%s",p->sex);
printf("上机学时\n");
printf("%s",p->csny);
printf("开课学期\n");
printf("%s",p->xueli);
printf("课程编号\n");
printf("%s",p->zhuzhi);
printf("授课老师联系电话\n:");
printf("%s",p->phone);
break;
}
else{
p=p->next;
}
}
}
}
}
int Worker::gengxin(stu *head){
if(r==1){
printf("请先输入信息,否则错误");
}
else{
char name[10];
stu *q;
q=head->next;
printf("请输入课程的名称,用来更新课程信息\n");
scanf("%s",name);
while(q!=NULL){
if(strcmp(name,q->name)==0){
printf("请输入指令:1.课程名称 2.课程编号 3.学分 4.课程性质 5.总学时 6.授课学时 7.上机学时 8.开课学期 9.授课老师电话");
int c;
scanf("%d",&c);
switch(c){
case 1:
scanf("%s",q->name);printf("已完成");break;
case 2:
scanf("%s",q->bianhao);printf("已完成");break;
case 3:
scanf("%d",&q->all);printf("已完成");break;
case 4:
scanf("%s",q->bumen);printf("已完成");break;
case 5:
scanf("%s",q->sex);printf("已完成");break;
case 6:
scanf("%s",q->csny);printf("已完成");break;
case 7:
scanf("%s",q->xueli);printf("已完成");break;
case 8:
scanf("%s",q->zhuzhi);printf("已完成");break;
case 9:
scanf("%s",q->phone);printf("已完成");break;
}
}
else {
q=q->next;
}
}
}
}
int Worker::filesave(stu *head){
int n;
printf("请输入有几门课程,便于保存到text文件中");
scanf("%d",&n);
stu *p;
p=head->next;
FILE* fp;
fp=fopen("text.txt","wt");
if(fp==NULL){
printf("文件打开错误");
exit(0);
}
char line[512];
for(int i=0;i<n;i++){
sprintf(line,"%s\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p->name,p->bianhao,p->all,p->bumen,p->sex,p->csny,p->xueli,p->zhuzhi,p->phone);
p=p->next;
fputs(line,fp);
}
fclose(fp);
}
int Worker::loadfile(stu *head){
FILE* fp;
fp=fopen("text.txt","rt");
if(fp==NULL){
printf("文件打开错误");
exit(0);
}
int n;
printf("几门课程\n");
scanf("%d",&n);
stu ss[1000];
char line[1024];
int i=0;
while(i<n){
char *ret=fgets(line,sizeof(line),fp);
if(ret==NULL){
break;
}
sscanf(line,"%s%s%d%s%s%s%s%s%s\n",ss[i].name,ss[i].bianhao,&ss[i].all,ss[i].bumen,ss[i].sex,ss[i].csny,ss[i].xueli,ss[i].zhuzhi,ss[i].phone);
printf("%d\t",ss[i].all);
i++;
}
fclose(fp);
ss[100]=ss[0];//zong
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1-i;j++){
if(ss[j].all<ss[j+1].all){
ss[100]=ss[j];
ss[j]=ss[j+1];
ss[j+1]=ss[100];
}
}
}
printf("各课程学分降序排列如下\n");
for(int i=0;i<n;i++){
printf("%s的学分为%d\n",ss[i].name,ss[i].all);
}
printf("\n");
}
int Worker::menu()
{
printf("\n");
printf("&&&&&&&&&&&& 作者:王山 &&&&&&&&&&&&&&");
printf(" 职工信息管理 \n");
printf(" 1.录入课程信息");
printf(" 2.浏览课程信息,且保存到text文件中去。\n");
printf(" 3.查课程信息\n");
printf(" 4.删除课程信息\n");
printf(" 5.添加课程信息");
printf(" 6.修改课程信息\n");
printf(" 7.学分排序信息,从text文件中获取学分信息,在进行排序,进行输出\n");
printf(" 8.学生选课\n");
printf("&&&&&&&&&&&& 谢谢使用 &&&&&&&&&&&\n");
printf("\n");
printf("\n");
}
int Worker::zhuce()
{
FILE* p=fopen("tex.txt","wt");
if(p==NULL){
printf("不存在");
}
printf("请先注册,先输入称呼 ,在输入密码::");
char line[1024];//使用字符数组存储变量
char name[100];
int mima;
printf("请输入称呼");
scanf("%s",name);
printf("请输入密码(数字)");
scanf("%d",&mima);
sprintf(line,"%s\t\t%d",name,mima);
fputs(line,p);
fclose(p);
}
int Worker::denglu(){
printf("如有遗忘,可在tex文件中查看注册的信息\n");
char line[1024];
char name[10];
char name1[1024];
int lee;
int mima;
FILE* fp=fopen("tex.txt","rt");
if(fp==NULL){
printf("不存在");
}
fgets(line,sizeof(line),fp);
sscanf(line,"%s%d",name,&lee);
fclose(fp);
plan:
printf("请输入称呼:");
scanf("%s",name1);
printf("请输入密码\n");
scanf("%d",&mima);
if(lee==mima&&strcmp(name,name1)==0){
printf("登录成功");
}
else{
printf("请重新输入称呼和密码\n");
goto plan;//跳转语句,用于循环判断。
}
}
int Student::xuanke(){
FILE* fp;
FILE* p;
fp=fopen("text.txt","rt");
if(fp==NULL){
printf("文件打开错误\n");
exit(0);
}
stu ss[1000];
char line[1024];
int i=0;
int n=0;
while(1){
char *ret=fgets(line,sizeof(line),fp);
if(ret==NULL){
break;
}
sscanf(line,"%s%s%d%s%s%s%s%s%s\n",ss[i].name,ss[i].bianhao,&ss[i].all,ss[i].bumen,ss[i].sex,ss[i].csny,ss[i].xueli,ss[i].zhuzhi,ss[i].phone);
printf("%s的学分为%d\n",ss[i].name,ss[i].all);
i++;
n++;
}
p=fopen("xuanke.txt","wt");
if(p==NULL){
printf("文件打开错误\n");
exit(0);
}
char lin[1024];//间接存储课程信息
char namee[1024];
char namm[1024];
char naww[1024];
int k=n;
printf("请开始选课,输入课程名称即可,选三门\n");
scanf("%s",namee);
scanf("%s",namm);
scanf("%s",naww);
for(int j=0;j<k;j++){
if(!strcmp(namee,ss[j].name)==0||!strcmp(namm,ss[j].name)==0||!strcmp(naww,ss[j].name)==0){
fprintf(p,"%s\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",ss[j].name,ss[j].bianhao,ss[j].all,ss[j].bumen,ss[j].sex,ss[j].csny,ss[j].xueli,ss[j].zhuzhi,ss[j].phone);
//printf("666\n");
//fputs(lin,p);
}
}
printf("已完成 可去xuanke文档中查看\n");
}
int main(){
Worker tom;
Student st;
printf("选择登录方式输入 1先注册后登录 2.直接登录::\n");
int s;
printf("请选择登录方式\n");
scanf("%d",&s);
if (s==1){
tom.zhuce();
tom.denglu();
}
//system("cls");
else{
tom.denglu();
}
ws();
int n,flag;
tom.menu();
char a;
do
{
printf("请选择你需要操作的步骤(1--8):\n");//乱输入 n为0
scanf("%d",&n);
while(getchar()!='\n'){printf("错误了\n");}
printf("请重新输入1-8\n");
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您输入有误,请重新选择\n");
}
}while(flag==0);
while(flag==1)
{
switch(n)
{
case 1:printf(" .......输入课程信息\n");printf("\n");tom.setline(head);tom.filesave(head);break;
case 2:printf(" .......浏览课程信息,且在text文件中查看\n");printf("\n");system("cls");tom.dayin(head);if(r==2){
tom.filesave(head);};break;
case 3:printf("........查询课程信息 学分或课程性质\n");printf("\n");tom.serch(head);break;
case 4:printf(" .......删除课程信息\n");printf("\n");tom.shanchu(head);break;
case 5:printf(" .......添加课程信息\n");printf("\n");tom.insert(head);break;
case 6:printf(" .......更新课程信息\n");printf("\n");tom.gengxin(head);break;
case 7:printf("........课程学分信息,从text文件中获取总工资信息\n");printf("\n");tom.loadfile(head);break;
case 8:printf(" .......学生选课\n");printf("\n");st.xuanke();break;
default :printf("输入错误,请重新输入指令");
}
getchar();
printf("\n");
printf("是否继续进行('y'进行,其余输入为退出程序):\n");
scanf("%c",&a);
if(a=='y')
{
flag=1;
tom.menu();
printf("请再次选择你需要操作的步骤(1--7):\n");
scanf("%d",&n);
printf("\n");
}
else
exit(0);
}
}
void ws(){
printf(" 鸡你太美 \n");
printf(" 鸡你实在太美\n");
printf(" 鸡你是太美 \n");
printf(" 鸡你太美 \n");
printf(" 实在是太美鸡你 \n");
printf(" 鸡你 实在是太美鸡你 美 \n");
printf(" 鸡你 实在是太美鸡美 太美 \n");
printf(" 鸡你 实在是太美鸡美 太美 \n");
printf(" 鸡你 实在是太美鸡美 太美 \n");
printf(" 鸡你 鸡你实在是美太美 美蓝球球 \n");
printf("鸡 鸡 鸡你实在是太美 篮球篮球球\n");
printf("鸡 鸡你太美裆鸡太啊 蓝篮球 \n");
printf(" 鸡你太美裆裆鸡美 \n");
printf(" 鸡你美裆 裆鸡美 \n");
printf(" 鸡太美 鸡太美 \n");
printf(" 鸡美 鸡美 \n");
printf(" 鸡美 鸡美 \n");
printf(" 鸡美 鸡美 \n");
printf(" 鸡太 鸡太 \n");
printf(" 金 猴 金猴 \n");
printf(" 皮 鞋 皮鞋金猴 \n");
printf(" 金光 金光 大道 \n");
printf(" 大道\n");
}