ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

课程信息管理系统

2020-01-27 11:42:53  阅读:381  来源: 互联网

标签:num temp void 课程 strcpy 信息管理系统 subject


C语言程序设计–课程信息管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
#define LEN 50    //定义一个足够大容量的课程号和名称字符数
#define N 255     //最大的课程数目
//01定义课程信息结构体
struct course
{
 char num[LEN+1];           //课程号
 char name[LEN+1];          //课程名称
 char department[LEN+1];    //课程系别
 char nature[LEN+1];        //课程性质
 float score;               //课程学分
}subject[N];
int k=1,n,m;      //k在后面起到调用主菜单函数的作用,n为课程的总数目,m为课程的最大数目
//函数声明
void read();                  //刷新
void menu();                  //主菜单   
void input();                 //使用帮助
void show();                  //课程信息显示
void find();                  //课程信息查找
void remove();                //课程信息删除
void amend();                 //课程信息修改
void sort();                  //课程信息排序
void save();                  //课程信息保存
//通过前面定义了一个k变量,达到调用后面的菜单menu函数
int main ()
{
 while(k)
 {
  menu();
 }
 system("pause");
 return 0;
}
//02对  系统使用帮助  功能进行实现
void help()
{
printf("欢迎使用系统帮助\n");
printf("1.按照菜单提示键输入想要实现的功能的数字代号;\n");
printf("2.增加学生信息后,记得保存;\n");
printf("谢谢您使用系统帮助!\n");
}
//03对  课程信息排序  功能进行实现(根据课程号大小排序)  
void sort()
{
int i,j;
char temp[LEN+1];               //temp数组通过在两个课程号之间的数据交换作为中间变量
float *p,*q,s;                  //效果同上
for(i=0;i<n-1;i++)
 {
 for(j=n-1;j>i;j--)
  {
  if(strcmp(subject[j-1].num,subject[j].num)>0)      //从第一个课程与倒数第二个课程的课程号进行比较,然后从第二个课程与倒数第三个课程的课程号进行比较......以此类推进行排序        
   {
   strcpy(temp,subject[j-1].num);             //
   strcpy(subject[j-1].num,subject[j].num);   //这三行使得课程号大的排序在后面
   strcpy(subject[j].num,temp);               //
   strcpy(temp,subject[j-1].name);              //
   strcpy(subject[j-1].name,subject[j].num);   //这三行使得对应的课程名字随课程号变动而变动
   strcpy(subject[j].name,temp);                //
   strcpy(temp,subject[j-1].department);                    //
   strcpy(subject[j-1].department,subject[j].department);   //这三行使得对应的课程系别随课程号变动而变动
   strcpy(subject[j].department,temp);                      //
   strcpy(temp,subject[j-1].nature);                 //
   strcpy(subject[j-1].nature,subject[j].nature);   //这三行使得对应的课程性质随课程号变动而变动
   strcpy(subject[j].nature,temp);                   //
            p=&subject[j-1].score;             //      
   q=&subject[j].score;               //
   s=*q;                               //这五行使得对应的课程所占学分通过指针来随课程号变动而变动
   *q=*p;                              //
   *p=s;                               //
   }
  }
 }
}
//04对  课程信息录入  功能进行实现
void input()
{
int i=n,j,flag;
printf("请输入要增加的课程数目:\n");
scanf("%d",&m);
if(m>0)
{
 do                            //运用do-while循环结构,因为其特点是无论是否符合条件都会进行一次循环,从而判断并告知使用者输入的课程号是否已存在,如果存在则重新输入,不存在则继续后续程序
 {
  flag=1;
  while(flag)
  {
   flag=0;
   printf("请输入第%d门课程的课程号:\n",i+1);
   scanf("%s",subject[i].num);
   for(j=0;j<i;j++)
   {
    if(strcmp(subject[i].num,subject[j].num)==0)
    {
     printf("该课程号已存在!");
     flag=1;
     break;
    }
   }
  }
  printf("请输入第%d门课程的名称:\n",i+1);
  scanf("%s",subject[i].name);
  printf("请输入第%d门课程的系别:\n",i+1);
  scanf("%s",subject[i].department);
  printf("请输入第%d门课程的性质:\n",i+1);
  scanf("%s",subject[i].nature);
  printf("请输入第%d门课程所占的学分:\n",i+1);
  scanf("%f",&subject[i].score);
  if(0==flag)
  {
   i++;
  }
 }
 while(i<n+m);
 n+=m;                             //及时更新总课程数目
 printf("新课程信息增加完毕!\n\n");
 sort();                           //在录入时就调用03 void sort函数对课程进行排序
 system("pause");
 }
}
//05对  新增课程信息的保存   功能进行实现
 void save()
 {
  char filename[LEN+1];
  FILE *fp;                  //定义一个FILE结构体变量,fp称为指向一个文件的指针
  int i=0;
  printf("请输入课程信息将要保存的文件名:\n");
  scanf("%s",filename);
  fp=fopen(filename,"w");             //
  for(i=0;i<n;i++)
  {
   fprintf(fp,"%s\t %s\t %s\t %s\t %.1f\n",subject[i].num,subject[i].name,subject[i].department,subject[i].nature,subject[i].score);       //fprintf给定的格式输出到fp所指定的文件中
  }
  printf("保存成功!\n");
  fclose(fp);
  system("pause");
 }
//06课程信息的修改
void amend()
{
int i=0,item,e= -1;
char s1[LEN+1],s2[LEN+1],s3[LEN+1],s4[LEN+1];
float score1,temp;
printf("请输入要修改的课程的课程号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
 {
 if(strcmp(subject[i].num,s1)==0)
 {
 e=i;
 }
}
if(e!=-1)
{
 printf("1.修改课程名\n");
 printf("2.修改课程系别\n");
 printf("3.修改课程性质\n");
 printf("4.修改课程所占学分\n");
 printf("5.退出本菜单\n");
 while(1)
 {
  printf("请选择子菜单编号:");
  scanf("%d",&item);
  switch(item)                         //根据switch-case语句实现对定向课程信息的修改
  {
  case 1:
   printf("请输入新的课程名:\n");
   scanf("%s",&s4);
   strcpy(subject[e].name,s4);break;
  case 2:
   printf("请输入新的课程系别:\n");
   scanf("%s",&s2);
   strcpy(subject[e].department,s2);break;
  case 3:
   printf("请输入新的课程性质:\n");
   scanf("%s",&s3);
   strcpy(subject[e].nature,s3);break;
  case 4:
   printf("请输入新的课程所占学分:\n");
   scanf("%f",score1);
   temp=score1;
   score1=subject[e].score;
   subject[e].score=temp;break;
  case 5:return;
  default:printf("请在1-5之间选择\n");
  }
 }
 printf("修改成功!");
}
 else
 {
  printf("该课程号不存在!\n");
  system("pause");
 }
}
//07对  课程信息的刷新  功能进行实现
void read()
{
char filename[LEN+1];
FILE *p;
int i=0;
printf("请输入课程信息保存的文件名:\n");
scanf("%s",filename);
if((p=fopen(filename,"r"))==NULL)
{
 printf("打开%s失败!",filename);
 printf("请先选择主菜单1输入学生信息并保存");
 system("pause");
 return;
}
while(fscanf(p,"%s %s %s %s %f\n",subject[i].num,subject[i].name,subject[i].department,subject[i].nature,subject[i].score)==5)
{
 i++;
}
n=i;
if(0==1)
{
 printf("文件为空");
}
else
{
 printf("读入完成\n");
 fclose(p);
 system("pause");
}
}
//08课程信息查找
void find()
{
 int i,item,flag;
 char s1[50];                   //通过s1的与课程号,课程名称分别比较大小实现查找到想要的课程信息
 printf("-------1.按课程号查询-----------\n");
 printf("-------2.按课程名称查询---------\n");
 printf("-------3.退出本菜单-------------\n");
 while(1)
 {
  printf("请选择子菜单编号:");
  scanf("%d",&item);
  flag=0;
  switch(item)
  {
  case 1:
   printf("请输入要查询的课程的课程号:\n");
   scanf("%s",s1);
   for(i=0;i<n;i++)
   {
    if(strcmp(subject[i].num,s1)==0)
    {
     flag=1;
    printf("课程号   课程名称  系别   性质    学分\n");
    printf("-------------------------------------------\n");
    printf("%5s %5s %5s %5s %10.1f\n",subject[i].num,subject[i].name,subject[i].department,subject[i].nature,subject[i].score);
    }
   }
   if(0==flag)
  {
   printf("该课程号不存在!\n");
   break;
  }
  case 2:
   printf("请输入要查询的课程的名称:\n");
   scanf("%s",s1);
   for(i=0;i<n;i++)
   {
    if(strcmp(subject[i].name,s1)==0)
    {
     flag=1;
    printf("课程号   课程名称  系别   性质    学分\n");
    printf("-------------------------------------------\n");
    printf("%5s %5s %5s %5s %10.1f\n",subject[i].num,subject[i].name,subject[i].department,subject[i].nature,subject[i].score);
    }
   }
   if(0==flag)
  {
   printf("该课程名称不存在!\n");
   break;
  }
  case 3:
   return;
  default:
   printf("请在1-3之间选择\n");
  }
 }
}
//09对  课程信息显示  功能进行实现
void show()
{
 int i;
 printf("共有%d门课程的信息:\n",n);
 if(0!=n)
 {
  printf("课程号   课程名称  系别   性质    学分\n");
  printf("-------------------------------------------\n");
  for(i=0;i<n;i++)
  {
   printf("%5s %5s %5s %5s %10.1f\n",subject[i].num,subject[i].name,subject[i].department,subject[i].nature,subject[i].score);
  }
 }
 system("pause");
}
//对  课程信息删除  功能进行实现
void remove()
{
 int i,j,flag=0;
char s1[LEN+1];
printf("请选择要删除的课程的课程名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
{
 if(strcmp(subject[i].name,s1)==0)
 {
  flag=1;
  for(j=i;j<n-1;j++)
   subject[j]=subject[j+1];
 }
}
if(0==flag)
{
 printf("该课程不存在!\n");
}
if(1==flag)
 {
 printf("删除成功,显示结果请选择菜单\n");
 n--;
 }
system("pause");
}
//00设计好初始界面函数
void menu()
{
 int x;
printf("                                                    课程信息管理系统                                                  \n");
printf("                                              设计者:新能源1901   魏浩                                               \n");
printf("                                                     指导老师:曹桂红                                                 \n");
printf("                                             |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|                                          \n");
printf("                                             |          请选择功能         |                                          \n");
printf("                                             |        系统使用帮助:0      |                                          \n");
printf("                                             |        课程信息录入:1      |                                          \n");
printf("                                             |        课程信息显示:2      |                                          \n");
printf("                                             |        课程信息查找:3      |                                          \n");
printf("                                             |        课程信息删除:4      |                                          \n");
printf("                                             |        课程信息修改:5      |                                          \n");
printf("                                             |        课程信息排序:6      |                                          \n");
printf("                                             |        课程信息保存:7      |                                          \n");
printf("                                             |        课程信息刷新:8      |                                          \n");
printf("                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                           \n");
printf("请选择想要实现的功能:");
scanf("%d",&x);
//使用  switch-case语句 开始对功能进行选择
switch (x)
 {
 case 0:help();break;                         //帮助
 case 1:input();break;                        //录入
 case 2:show();break;                         //显示
 case 3:find();break;                         //查找
 case 4:remove();break;                       //删除
 case 5:amend();break;                        //修改
 case 6:sort();break;                         //排序
 case 7:save();break;                         //保存
 case 8:read();break;                         //刷新
 default:
 printf("选择错误:请在0-8之间选择\n");
 

qq_45818573 发布了8 篇原创文章 · 获赞 1 · 访问量 65 私信 关注

标签:num,temp,void,课程,strcpy,信息管理系统,subject
来源: https://blog.csdn.net/qq_45818573/article/details/104091579

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有