C语言提问
用链表实现简单的学籍管理,1链表建立 ,节点插入(学号),删除链表节点(按学号),链表输出(按学号和总分),2各功能分别用函数实现;节点信息让用户输入;总分通过计算获得;用简单的操作界面
答案:#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 5
#define PRIN1 "课程编号 课程名称 课程性质 总学时 总学分\n" /*宏定义,表格标题*/
#define PRIN2 "%-12d%-8s\t%-10c%-8d%-4.2f\n" /*宏定义,格式控制,使用2个printf且与PRIN1连用输出课程信息。*/
typedef struct kecheng /*定义结构体,用typedef重命名结构体*/
{
int num; /*课程编号*/
int zxs; /*总学时*/
float xf; /*课程学分*/
char name[20]; /*课程名称*/
char xz; /*课程性质*/
}kc;
int lr(kc k[],int n) /*录入函数,用于录入课程信息。*/
{
int i;
system("cls"); /*清屏*/
printf("\t\t\t录入课程信息!\n");
printf("请输入课程编号:\n");
if(n!=0) /*当录入过信息后为保证编号不重复,在此进行编号检查,重复则重新输入*/
{
p: scanf("%d",&k[n].num);
for(i=0;i<n;i++)
{
if(k[n].num==k[i].num)
{
printf("录入编号已存在,请重新输入:\n");
goto p;
}
}
}
else /*如果是第一次输入不会有重复,直接接收。*/
scanf("%d",&k[n].num);
printf("请输入课程名称:\n");
scanf("%s",k[n].name);
printf("请输入课程性质选修X或必修B\n");
getchar(); /*屏蔽回车*/
k[n].xz=getchar();
if(k[n].xz>97) /*此处判断输入的字母是否为大写,保证性质属性一致为大写进行大小写转换,方便后面根据课程性质查询。*/
k[n].xz=k[n].xz-32;
printf("请输入课程总学时:\n");
scanf("%d",&k[n].zxs);
printf("请输入总学分:\n");
scanf("%f",&k[n].xf);
n++; /*录入完成后计数值加一表示新增一条记录。*/
return n;
}
void px(kc k[],int n) /*按编号排序*/
{
int i,j;
kc m;
for(i=0;i<n-1;i++) /*运用冒泡法,按照课程的编号进行排序*/
{
for(j=0;j<n-1-i;j++)
if(k[i].num>k[i+1].num)
{
{m.num=k[i].num; k[i].num=k[i+1].num; k[i+1].num=m.num;}/*编号互换*/
{m.zxs=k[i].zxs; k[i].zxs=k[i+1].zxs; k[i+1].zxs=m.zxs;}/*总学时互换*/
{m.xf=k[i].xf; k[i].xf=k[i+1].xf; k[i+1].xf=m.xf;}/*学分互换*/
{m.xz=k[i].xz; k[i].xz=k[i+1].xz; k[i+1].xz=m.xz;}/*性质互换*/
{strcpy(m.name,k[i].name); strcpy(k[i].name,k[i+1].name); strcpy(k[i+1].name,m.name);}/*名字互换*/
}
}
}
void ll(kc k[],int n) /*浏览函数*/
{
system("cls");
printf("\t\t\t课程信息浏览!\n");
char c;
if(n==0) /*判断是否有记录*/
{
printf("暂无记录!\n");
return ;
}
int i;
printf(PRIN1);
for(i=0;i<n;i++)
{
printf(PRIN2,k[i].num,k[i].name,k[i].xz,k[i].zxs,k[i].xf);
printf("\n");
}
printf("是否按序号排序查看?Y/N\n");
getchar();
c=getchar();
if(c=='Y')
{
system("cls");
px(k,n); /*调用排序函数,对课程按编号排序*/
printf(PRIN1);
for(i=0;i<n;i++)
{
printf(PRIN2,k[i].num,k[i].name,k[i].xz,k[i].zxs,k[i].xf);
printf("\n");
}
return ;
}
else
return ;
}
void fscx(kc k[],int n) /*分数查询函数*/
{
system("cls");
float x;
int i,a=0;
printf("\t\t\t按学分查询课程!\n");
printf("请输入要查询的学分:\n");
scanf("%f",&x);
printf(PRIN1);
for(i=0;i<n;i++)
{
if(x==k[i].xf)
{
a++;
printf(PRIN2,k[i].num,k[i].name,k[i].xz,k[i].zxs,k[i].xf);
}
}
if(a==0)
{
system("cls");
printf("没有该学分的课程!\n");
}
}
void xzcx(kc k[],int n) /*性质查询函数*/
{
system("cls");
char c;
int i,a=0;
printf("\t\t\t按学科性质查询!\n");
printf("请输入你要查询的学科性质选修X必修B:\n");
do{
getchar();
c=getchar();
if(c=='X'||c=='B')break; /*为保证输入与所查内容一致,限定输入为大写X或者B。*/
else
printf("输入有误,请输入X或者B:\n");
}while(c!='X'||c!='B');
printf(PRIN1);
for(i=0;i<n;i++)
{
if(c==k[i].xz)
{
a++;
printf(PRIN2,k[i].num,k[i].name,k[i].xz,k[i].zxs,k[i].xf);
}
}
if(a==0)
{
system("cls");
printf("目前没有该性质的课程!\n");
}
}
void find(kc k[],int n) /*查询菜单*/
{
system("cls");
int c;
printf("请选择一种查询方式:\n");
printf("*1按照课程学分查询\n");
printf("*2按照课程性质查询\n");
scanf("%d",&c);
switch(c)
{
case 1:fscx(k,n);break;/*调用分数查询函数*/
case 2:xzcx(k,n);break; /*调用性质查询函数*/
default:printf("暂无第三种查询方式!\n");
}
}
void change(kc k[],int n) /*修改已有的课程
上一个:什么是C语言
下一个:怎么学习C语言