📄 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 + -