跪求c语言做的《学生选修课程系统设计》
麻烦各位达人了,要求如下:
课程设计题目:学生选修课程系统
课程设计内容:用C语言编写程序完成以下任务:
(1) 录入课程信息(课程信息包括课程编号、课程名、学时和学分),并保存在lessons.txt文件中,课程按课程编号有序。
(2)添加课程信息:添加前首先查找该门课是否存在,若不存在则按照课程编号大小插入到适当位置。
(3)选修一门课程:需要给出学号和课程编号,如果课程编号不存在则重新输入,直到输入正确为止,并将学号和相应的课程编号存入SelectInfo.txt文件中。
(4)显示出所有学生的选课情况。
课程设计要求:
1.贯彻结构化程序设计思想。
2.用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
3.用户界面中的菜单至少应包括“输入课程信息”、“添加课程信息”、“选课及显示”、“退出”4项。
4.代码应适当缩进,并给出必要的注释,以增强程序的可读性。
答案:接上面:int Del(TSTU list[], int n) {
int key, flag ;
loop:
printf("1.按学号删除\t2.按课程名删除\t0.返回\n") ;
do{
printf("请输入功能编号:") ;
scanf("%d",&key) ;
}
while(key<0||key>2) ;{
while(key!=0){
switch(key){
int i;
case 1:
int index, num ;
printf("请输入你要删除学生信息的学号:") ;
scanf("%d",&num) ;
index=searchforNum(list, n, num) ;
while(index==-1){
char yn ;
printf(" 没有找到到该信息!是否继续(y/n)?\n") ;
yn=getch() ;
if(yn='y'){
goto loop ;
}
else{
flag=1 ;
break ;
}
if(flag==1){
printf("按任意键返回!") ;
getch() ;
return index ;
}
scanf("%d", &num) ;
index=searchforNum(list, n ,num) ;
}
char yn ;
outputTableHead() ;
outputData(list, index) ;
printf("确定要删除吗(y/n)?") ;
yn=getch() ;
if(yn=='y') {
for(i=index;i<n;i++) {
if(list[i].num==num) {
list[i].num=list[i+1].num ;
strcpy(list[i].name,list[i+1].name) ;
list[i].wages=list[i+1].wages ;
list[i].fraction=list[i+1].fraction ;
}
printf("\n删除完成!按任意键继续...\n") ;
getch() ;
printf("是否继续删除?(y/n)?") ;
char yn ;
yn=getch() ;
if(yn=='y'){
printf("\n") ;
goto loop ;
}
else{
printf("\n") ;
break ;
}
}
return n-1 ;
}
else{
printf("\n本次删除取消!按任意键继续...\n") ;
getch() ;
goto loop ;
}
break;
case 2:
printf("抱歉!该功能尚未开放。按任意键返回...") ;
getch() ;
printf("\n") ;
goto loop ;
}
}
}
return n-1 ;
}
void savefile(TSTU list[], int n){
FILE *fin ;
int i=0 ;
fin=fopen("lessons.txt", "w") ; /*修改增加删除的信息全部保存在此文件里面(就是你开始建立的那个txt文件)*/
if(fin==NULL){
printf("打开文件失败!") ;
return ;
}
while(i<n){
fprintf(fin,"%d\t", list[i].num) ;
fprintf(fin,"%s\t", list[i].name) ;
fprintf(fin,"%f\t", list[i].wages) ;
fprintf(fin,"%f\t", list[i].fraction) ;
i++ ;
}
fprintf(fin,"%d", 0) ;
fclose(fin) ;
}
void main(){
int n, key ;
TSTU list[100] ;
n=init(list) ;
loop:
key=menu() ;
while(key!=0){
switch(key)
{
case 1:
browseData(list, n) ;
break ;
case 2:
search(list, n) ;
break ;
case 3:
n=insertData(list ,n) ;
break ;
case 4 :
ModityData(list ,n) ;
break ;
case 5:
n=Del(list, n) ;
}
key=menu() ;
}
char yn ;
printf("你确定要退出吗?(y/n)?") ;
yn=getch() ;
if(yn=='y'){
savefile(list, n) ;
printf("\n保存完毕!感谢使用...\n感谢使用本程序\t\t作者:冉凯\n任意键退出...\n") ;
getch() ;
}
else{
printf("\n") ;
goto loop ;
}
}
程序花我一小时做的。给你增加了一些功能。我没有验证,你自己验证下。有问题联系rankawin@163.com ,有一些你可能需要根据你具体的情况做一下修改。该程序所有权归ID:Mr.Kawins.(QQ:363283860)所有,只限你本人使用,请不要在网络传播。谢谢。。。
文件超过10000字没法一次性回答,我分两次传给你。
#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"conio.h"
typedef struct worker{
int num ;
char name[20] ;
float wages ;
float fraction ;
}TSTU ;
int init(TSTU list[]){
FILE *fin ;
int num, n=0 ;
fin=fopen("lessons.txt","r+") ; /*在编译目录下建立一lessons.txt文档,里面需要输入一个0即可。*/
if(fin==NULL){
printf("打开文件失败...\n") ;
return 0 ;
}
fscanf(fin,"%d",&num) ;
while(num!=0){
list[n].num=num ;
fscanf(fin, "%s", list[n].name) ;
list[n].wages=0.0 ;
fscanf(fin, "%f", &list[n].wages) ;
fscanf(fin, "%f", &list[n].fraction) ;
n=n+1 ;
fscanf(fin, "%d", &num) ;
}
fclose(fin) ;
return n ;
}
void outputTableHead(void){
printf("学号\t课程名\t学时\t学分") ;
}
void outputData(TSTU list[], int index){
printf("%d\t%s\t%4.0f\t%2.1f\t%2.1f\n", list[index].num, list[index].name,
list[index].wages, list[index].fraction) ;
}
void browseData(TSTU list[], int n){
outputTableHead() ;
int i ;
for(i=0;i<n;i++){
outputData(list, i) ;
}
printf("浏览结束,按任意键返回...\n") ;
getch() ;
}
int menu(void){
printf("***********************************************************\n") ;
printf("****************** 学生管理程序 ******************\n") ;
printf("***\t1.显示\t2.查找\t3.增加\t4.修改\t5.删除\t0.退出\t***\n") ;
printf("***********************************************************\n") ;
int key ;
printf("请输入功能代号:") ;
scanf("%d", &key) ;
while(key<0||key>5){
printf("请输入正确的功能代号:") ;
scanf("%d", &key) ;
}
return key ;
}
int searchforNum(TSTU list[], int n, int num){
int i ;
for(i=0;i<n;i++){
if(list[i].num==num){
break ;
}
}
if(i<n){
return i ;
}
else{
return -1 ;
}
}
int searchMenu(void){
printf("1.按学号查\t2.按课程名查\t0.返回\n") ;
int key ;
do{
printf("请输入正确的功能编号:") ;
scanf("%d",&key) ;
}
while(key<0||key>2);
return key ;
}
void search(TSTU list[], int n){
int key ;
loop:
key=searchMenu() ;
while(key!=0){
switch(key){
case 1:
int index, num ;
printf("请输入你要查询学生息的学号:") ;
scanf("%d",&num) ;
index=searchforNum(list, n, num) ;
if(index==-1){
printf(" 没有查询到该信息!\n") ;
}
else{
outputTableHead() ;
outputData(list, index) ;
}
break;
case 2:
printf("抱歉!该功能尚未开放!按任意键返回...") ;
getch() ;
printf("\n") ;
goto loop ;
}
printf("查询结束,按任意键返回!\n") ;
getch() ;
key=searchMenu() ;
}
}
int insertData(TSTU list[], int n){
int index, i;
int flag ;
int num ;
printf("请输入你要增加的学号:") ;
scanf("%d",&num) ;
index=searchforNum(list, n, num) ;
while(index!=-1){
printf("该学号已存在!\t是否继续(y/n)?\t") ;
char yn ;
yn=getch() ;
if(yn=='y'){
printf("\n请重新输入增加的学号:") ;
scanf("%d",&num) ;
index=searchforNum(list, n, num) ;
}
else{
flag=1 ;
break ;
}
}
if(flag==1){
printf("\n按任意键返回...\n") ;
getch() ;
return n ;
}
for(i=n-1;i>=0;i--){
if(list[i].num>num){
list[i+1].num=list[i].num ;
strcpy(list[i+1].name,list[i].name) ;
list[i+1].wages=list[i].wages ;
list[i+1].fraction=list[i].fraction ;
}
else{
break ;
}
}
i++ ;
list[i].num=num ;
printf("请输入课程名:") ;
scanf("%s",&list[i].name) ;
printf("请输入课时:") ;
scanf("%f",&list[i].wages) ;
printf("请输入学分:") ;
scanf("%f",&list[i].fraction) ;
printf("增加结束,按任意键继续\n") ;
getch() ;
return n+1 ;
}
int ModityData(TSTU list[
上一个:这个C语言的程序函数错误在哪?
下一个:想学习C语言给我推荐几本书吧