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

📄 list.cpp

📁 学校课程管理工具,DOS界面的.主要是学习链表的应用.也是这个期末学校要的
💻 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 + -