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

📄 c语言课程管理.txt

📁 这个是用C语言实现的课程管理系统
💻 TXT
字号:
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

struct stud 
{ 
long num; 
char name[20]; 
double score; 
}; 

typedef struct stucode 
{ 
struct stud student ; 
struct stucode *next; 
}L; 

void menu(); 
void createlist(struct stucode **r); 
void out(struct stucode *r); 
void search1(struct stucode *r); 
void search2(struct stucode *r); 
void del(struct stucode **r); 
void insert(struct stucode **r); 
void sort(struct stucode **r); 

void main() 
{ 
char choose; 
int flag=1; 
struct stucode *r=NULL; 

while(flag) 
{ 
system("cls"); //调用DOS下的清屏命令“cls”。
menu(); //调用菜单子函数
choose=getchar(); //返回输入字符:1.2.3.4...
switch(choose) 
{ 
case '1': 
createlist(&r);  //调用函数,建立新数据记录文件,存放课程信息及相关信息
out(r); //现在所输入的r个结果
printf("Testing function 1\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '2': 
search1(r);//查找某课程课号的课程信息
printf("Testing function 1\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '3': 
search2(r); //查找某课程名称的课程信息
printf("Testing function 1\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '4': 
del(&r); //删除某课程课号的课程信息
out(r); //显示删除的结果
printf("Testing function 1\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '5': 
insert(&r); //插入新的课程信息
out(r); //显示插入结果
printf("Testing function 1\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '6': 
sort(&r); //按课程课号升序排列输出
out(r); 
printf("Testing function 1\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '7': 
out(r); //输出结果
printf("Testing function 7\nPress any key to continue\n"); 
getchar(); 
getchar(); 
break; 

case '0': 
flag=0; 
printf("The end.\n"); 
break; 

default: printf("\nWrong Selection!(选择错误,请重选!)\n");getchar();getchar(); 
} 
} 
} 

void createlist(struct stucode **r) //能建立新数据记录文件,存放课程信息及学籍
{
FILE *fp;
int i;
struct stucode *p,*t; 
long n; 
char a[20]; 
double s; 
struct  
{long n; 
char a[20]; 
long s;}stu[20]; //输入范围在20以内
if(*r) *r=NULL; 
printf(" \n请输入:\n 课程课号(请按课程课号升序排列) 课程名称 授课老师教工号 (若要结束请输入三个为零)\n"); 
scanf("%ld%s%ld",&stu[i].n,stu[i].a,&stu[i].s); 

if(n==0) return; // 若要结束请输入三个为零

if ((fp = fopen("课程信息.txt","w+")) == NULL)//如果文件为空则不能打开
{
       printf ("不能打开文件!\n");getchar();
       exit(1);
}

for (i=0;i<20;i++)//可以输入20组数据
{
	fprintf(fp,"%ld %s %ld",&stu[i].n,stu[i].a,&stu[i].s);
}

fclose(fp);//关闭文件

p=(L *)malloc(sizeof(L)); //该函数分配了L个字节,并返回了指向这块内存的指针。L为长整型
/* l=(SeqList*)malloc(sizeof(SeqList)   
    
  SeqList是一个结构体   
  sizeof(SeqList)求出这个结构体的长度   
    
  malloc()函数用于向系统申请一块内存空间   
  里面的参数就是申请的空间字节数   
  申请成功后,将返回申请空间的首址,这是一个void   *   型的指针   
  用(SeqList*)将它转换成SeqList   *   型的指针,   再赋值给l
*/

p->student.num=n; 
strcpy(p->student.name,a); //拷贝学生姓名
p->student.score=s; 
p->next=NULL; 
*r=p; 

scanf("%ld%s%ld",&n,a,&s); 

while(n)  //根据课程号进行循环输入
{ 
t=p; 
p=(L *)malloc(sizeof(L)); 
p->student.num=n; 
strcpy(p->student.name,a); 
p->student.score=s; 
p->next=NULL; 
t->next=p; 
scanf("%ld%s%ld",&n,a,&s); 
} 
} 

void search1(struct stucode *r) //查找某课程课号的课程信息
{ 
long x; 
if(!r) 
{ 
printf("没有课程信息可查询!\n"); 
return ; 
} 
printf(" 请输入要查询的课程信息的课程课号:\n"); 
scanf("%ld",&x); 
while(r&&r->student.num!=x) 
r=r->next; 
if(r==NULL) 
printf("Error! No such student !\n"); 
else 
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score); 
} 

void search2(struct stucode *r) //查找某课程名称的课程信息
{ 
char m[20]; 
if(!r) 
{ 
printf("没有课程信息可查询!\n"); 
return ; 
} 

printf(" 请输入要查询的课程信息的课程名称:\n"); 
scanf("%s",m); 
while(r&&strcmp(r->student.name,m)) 
r=r->next; 
if(r==NULL) 
printf("Error! No such student !\n"); 
else 
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score); 
} 

void del(struct stucode **r) //删除某课程课号的课程信息
{ 
long k; 
struct stucode *p=*r,*t; 
if(!(*r)) 
{ 
printf("没有课程信息可删除 !\n"); 
return ; 
} 
printf(" 请输入要删除的课程信息的课程课号:\n"); 
scanf("%ld",&k); 

if(p->student.num==k) 
*r=(*r)->next,free(p); 
else 
{ 
while(p->next&&p->next->student.num!=k) 
p=p->next; 
if(p->next==NULL) 
printf("Error! No such student !\n"); 
else 
{ 
t=p->next; 
p->next=p->next->next; 
free(t); 
} 
} 
} 

void insert(struct stucode **r) //插入新的课程信息
{ 
long n; 
char a[20]; 
double s; 

L *p,*t,*k; 
printf(" 请输入要插入的课程信息的课程课号 课程名称 授课老师教工号:\n"); 
scanf("%ld%s%lf",&n,a,&s); 
p=(L *)malloc(sizeof(L)); 
p->student.num=n; 
p->student.score=s; 
strcpy(p->student.name,a); 
if(!(*r)) 
{ 
*r=p; 
(*r)->next=NULL; 
return ; 
} 
if(p->student.num<(*r)->student.num) 
p->next=(*r),(*r)=p; 
else 
{ 
t=*r; 
k=t; 
while(t->next&&t->next->student.num<=p->student.num) 
t=t->next; 
p->next=t->next; 
t->next=p; 
*r=k; 
} 
} 

void sort(struct stucode **r) //按课程课号升序排列输出
{ 
struct stucode *t,*p,*q,*z; 
if(!r) 
{ 
printf("没有课程信息可排序!\n"); 
return ; 
} 

if(!(*r)||!(*r)->next) 
return; 

t=*r; 
p=t->next; 
t->next=NULL; 
while(p) 
{ 
q=p->next; 
if(p->student.score>t->student.score) 
{ 
p->next=t; 
t=p; 
} 
else 
{ 
z=t; 
while(z->next&&z->next->student.score>=p->student.score) 
z=z->next; 
p->next=z->next; 
z->next=p; 
} 
p=q; 
} 
*r=t; 
} 

void out(struct stucode *r) (结果显示函数)
{ 
printf("\n\n"); 
if(!r) 
{ 
printf("没有课程信息可输出!\n");     
return ; 
} 

while(r) 
{ 
printf("%ld %s %.2lf\n",r->student.num,r->student.name,r->student.score); 
r=r->next; 
} 
printf("\n\n"); 
} 

void menu() 
{ 
printf("\n 课程信息管理系统\n"); 
printf("\n 菜单\n\n"); 
printf("\n 1建立链表并显示\n"); 
printf("\n 2查找某课程课号的课程信息\n"); 
printf("\n 3查找某课程名称的课程信息\n"); 
printf("\n 4删除某课程课号的课程信息\n"); 
printf("\n 5插入新的课程信息\n"); 
printf("\n 6按课程课号升序排列输出\n"); 
printf("\n 7输出\n"); 
printf("\n 0退出\n"); 

printf("\n 请选择您要执行的选项:\n"); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -