📄 list.cpp
字号:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
typedef struct less
{
long int code; //代码
char name[30]; //名称
char majar[40]; //专业
int grade; //年级
char term[20]; //学期
char check[40]; //考核方式
struct less *next;
}lesso,*lesson;
int init(lesson &s);
void insert(lesson &s);
void print(lesson &s);
int ldelete(lesson &s);
void find (lesson &s);
void findname(lesson &s);
void findnum(lesson &s);
void modifay(lesson &s);
void putfile(lesson &s);
void getfile(lesson &s);
void main()
{
lesson s;
init(s);
while(1)
{
char i; //不知为什么,这里不能用INT型,否则输入"ABC"等字符时会崩溃
mainint:
i = '0';
cout<<"\t"<<endl;
cout<<"\t"<<endl;
cout<<"欢迎使用课程管理系统."<<endl;
cout<<"2006.12 梁晓雪"<<endl;
cout<<"========================================="<<endl;
cout<<"请选择相关操作:"<<endl<<"1.建立课程信息."<<endl<<"2.显示所有课程并写入文本."<<endl<<"3.删除课程信息."<<endl;
cout<<"4.查找相关课程信息."<<endl<<"5.修改相关课程信息."<<endl<<"6.导入文本中课程信息."<<endl<<"7.退出管理系统." <<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"请选择: ";
cin>>i;
cout<<endl;
if(i<'1'||i>'7')
{
cout<<"输入了错误的数字,请重新输入!";
goto mainint;
}
switch(i)
{
case '1': insert(s);
break;
case '2': print(s);
putfile(s);
break;
case '3': ldelete(s);
break;
case '4': find(s);
break;
case '5': modifay(s);
break;
case '6': init(s); //这里如果去掉这句.就会把文件的内容
getfile(s);//反复加进来.越来越多.加了这句,保证
break; //数据正确了,但我没考虑内存问题.
case '7': exit(0);
}
}
}//主程序
int init(lesson &s)
{
s=(lesson)malloc(sizeof(lesso));
if (s)
{
s->next=NULL;
return 0;
}
else return -1;
}//链表初始化
void insert(lesson &s) //insert
{
cout<<endl;
lesson p,q;
p=(lesson)malloc(sizeof(lesso));
cout<<"请输入课程信息:"<<endl;
cout<<"课程名称:";
cin>>p->name;
cout<<endl;
cout<<"课程代码:";
cin>>p->code;
cout<<endl;
cout<<"专业:";
cin>>p->majar;
cout<<endl;
cout<<"年级:";
cin>>p->grade;
cout<<endl;
cout<<"学期:" ;
cin>>p->term;
cout<<endl;
cout<<"考核方式:" ;
cin>>p->check;
cout<<endl;
q=s;
while(!(q->next==NULL)&&(q->next->code<p->code))
q=q->next;
p->next=q->next;
q->next=p;
}// 链表插值
int ldelete(lesson &s) //delete
{
cout<<endl;
lesson p,a;
p=s ;
cout<<"请输入删除的课程代码:";
long int code;
cin>>code;
while(p)
{ if (p->code==code)
{
a->next=p->next;
free(p); return(0);}
else
{ a=p;
p=p->next;} }
cout<<"没有找到你要删除的项目!"<<endl<<endl;return(-1);
}//删除节点
void print(lesson &s)
{
int a;
a=0;
lesson p;
p=s->next;
cout<<"课程名称 "<<"代码 "<<"专业 "<<"年级 "<<"学期 "<<"考核方式"<<endl;
while(p)
{
a++;
cout<<p->name<<" "<<p->code<<" "<<p->majar<<" "<<p->grade<<" "<<p->term<<" "<<p->check<<endl;
p=p->next;
}
cout<<endl;
if (a==0)
cout<<"还没有课程信息!"<<endl<<endl ;
} //列印所有节点数据
void find (lesson &s) //find
{
findl:
cout<<"请选择查找方法:"<<endl<<"1.按名称查找."<<endl<<"2.按代码查找."<<endl;
cout<<"-----------------------------------------"<<endl;
cout<<"请选择:";
char k;
cin>>k;
if(k<'1'||k>'2')
{
cout<<"输了入错误数字,请重新输入!"<<endl<<endl;
goto findl;
}
switch(k)
{
case '1': findname(s);break;
case '2': findnum(s);break;
}
}// 查找节点数据
void findname(lesson &s) //find by name
{
lesson p;
p=s->next;
cout<<"请输入课程名称:";
char name[20];
int j;
j=0;
cin>>name;
cout<<"你要查找的资料是:"<<endl;
cout<<"课程名称 "<<"代码 "<<"专业 "<<"年级 "<<"学期 "<<"考核方式"<<endl;
while(p)
{
if (strcmp(p->name,name)==0)
{
cout<<p->name<<" "<<p->code<<" "<<p->majar<<" "<<p->grade<<" "<<p->term<<" "<<p->check<<endl;
j++;
}
p=p->next;
}
cout<<endl;
if(j==0)
cout<<"对不起,没找到你要的信息!"<<endl<<endl ;
} //查找课程名称子程序
void findnum(lesson &s) //find by code
{
lesson p;
p=s->next;
cout<<"请输入课程代码:";
long int code;
int j;
j=0;
cin>>code;
cout<<"你要查找的资料是:"<<endl;
cout<<"课程名称 "<<"代码 "<<"专业 "<<"年级 "<<"学期 "<<"考核方式"<<endl;
while(p)
{
if (p->code==code)
{
cout<<p->name<<" "<<p->code<<" "<<p->majar<<" "<<p->grade<<" "<<p->term<<" "<<p->check<<endl;
j++;
}
p=p->next;
}
cout<<endl;
if(j==0)
cout<<"对不起,没找到你要的信息"<<endl<<endl ;
}// 查找课程代码子程序
void modifay(lesson &s) //modifay
{
lesson q,p,l,m;
int j;
j=0;
q=s->next;
l=s;
m=s;
cout<<"请输入要修改的课程代码:" ;
long int num;
cin>>num;
cout<<endl;
cout<<"你要修改的信息是:"<<endl<<"课程名称 "<<"代码 "<<"专业 "<<"年级 "<<"学期 "<<"考核方式"<<endl;
while(q)
{
if (q->code==num)
{
cout<<q->name<<" "<<q->code<<" "<<q->majar<<" "<<q->grade<<" "<<q->term<<" "<<q->check<<endl;
j++;
p=(lesson)malloc(sizeof(lesso));
cout<<"请输入新的课程信息:"<<endl;
cout<<"课程名称:";
cin>>p->name;
cout<<endl;
cout<<"课程代码:";
cin>>p->code;
cout<<endl;
cout<<"专业:";
cin>>p->majar;
cout<<endl;
cout<<"年级:";
cin>>p->grade;
cout<<endl;
cout<<"学期:" ;
cin>>p->term;
cout<<endl;
cout<<"考核方式:" ;
cin>>p->check;
cout<<endl;
l->next=q->next;
free(q);
goto tt;
}
else
{
l=q;
q=q->next;
}
}
cout<<endl;
if (j==0) cout<<"没找到你要的数据!"<<endl<<endl ;
tt:
while(!(m->next==NULL)&&(m->next->code<p->code))
m=m->next;
p->next=m->next;
m->next=p;
}//修改课程信息
void putfile(lesson &s)
{
lesson p;
p=s->next;
FILE *fp;
if((fp=fopen("list.kfh","w"))==NULL)
{
cout<<"打不开文件"<<endl<<endl;
exit(0);
}
while(p)
{
if(fwrite(p,sizeof(struct less),1,fp)!=1 )
{
cout<<"文件写入错误"<<endl<<endl;
return;
}
p=p->next;
}
fclose(fp) ;
}// 写入文件
void getfile(lesson &s)
{
lesson p,q;
q=s;
FILE *fp1 ;
if((fp1=fopen("list.kfh","r"))==NULL)
{
cout<<"打不开文件"<<endl;
exit(0);
}
cout<<"课程名称 "<<"代码 "<<"专业 "<<"年级 "<<"学期 "<<"考核方式"<<endl;
p=(lesson)malloc(sizeof(lesso));
while(fread(p,sizeof(struct less),1,fp1)!=0)
{
cout<<p->name<<" "<<p->code<<" "<<p->majar<<" "<<p->grade<<" "<<p->term<<" "<<p->check<<endl;
while(!(q->next==NULL)&&(q->next->code<p->code))
q=q->next;
p->next=q->next;
q->next=p;
p=(lesson)malloc(sizeof(lesso));
}
fclose(fp1);
cout<<endl;
}// 从文件导出数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -