数据结构课程设计(附代码)
- 格式:doc
- 大小:278.50 KB
- 文档页数:28
算法与数据结构实验报告航班查询与检索题目:航班查询与检索指导老师:组长:成员:一:航班信息的查询与检索按时间查询:按站点查询:二分法查询:二:算法分析:程序主要采用结构体链表顺序表队列主要算法:/*航班信息的查询与检索*/三:/*航班信息的查询与检索*/#include<iostream.h>#include<string.h>#include<stdio.h>#define N 6 //航班数//航班信息typedef struct flight{char flight_number[10]; //航班号char start_address[10]; //起飞站char arrived_address[10]; //终点站char work_date[10]; //班期char start_time[6]; //起飞时间char arrived_time[6]; //到达时间char FlightType[4]; //机型int fare; //票价}DataType;struct flight Flight[N];//-----------按航班号进行基数排序-----------typedef char KeyType;#define D 7 // D为排序码的最大位数#define R 'a' // R为基数,这里为小于字母'a'代表的整型值struct Node; //单链表结点类型typedef struct Node RadixNode;struct Node{KeyType key[D]; //关键字DataType info; //数据信息RadixNode *next;};typedef RadixNode * RadixList;typedef struct QueueNode{RadixNode *f; //对列的头指针RadixNode *e; //对列的尾指针}Queue;Queue queue[R];//用队列表示桶void radixSort(RadixList * plist, int d, int r){int i,j,k;RadixNode *p, *head;head=(*plist)->next;for(j=d-1; j>=0; j--) //进行d次分配和收集{p=head;for(i=0; i<r; i++){queue[i].f=NULL; queue[i].e=NULL; //清队列}while(p!=NULL){k=p->key[j]; //按排序码的第j个分量进行分配if(queue[k].f==NULL) queue[k].f=p; // 若第k个堆为空,则当前记录为队头else (queue[k].e)->next=p; // 否则当前记录链接到第k队的队尾queue[k].e=p;p=p->next;}i=0;while(queue[i].f==NULL) i++; // 从r个队列中找出第一个非空的队列p=queue[i].e; head=queue[i].f; //head为收集链表的头指针for(i++; i<r; i++)if(queue[i].f!=NULL){ p->next=queue[i].f; p=queue[i].e; } // 收集非空队列p->next=NULL;}(*plist)->next=head;}//初始化航班信息struct Node element[N+1]={" "," "," "," "," "," "," "," ",0,NULL,//表头"CA1544","CA1544","合肥","北京","1245 ","10:55","12:40","733",960,NULL,"MU5341","MU5341","上海","广州","每日","14:20","16:15","M90",1280,NULL, "CZ3869","CZ3869","重庆","深圳","246 ","08:55","10:35","733",1010,NULL, "MU3682","MU3682","桂林","南京","23467","20:50","22:15","M90",1380,NULL,"HU1836","HU1836","上海","北京","每日","09:40","11:20","738",1250,NULL,"CZ3528","CZ3528","成都","厦门","13457","15:10","16:50","CRJ",1060,NULL,};//------------信息显示------------//按表的格式输出某个航班信息//显示头部信息void Cout_info1(){cout<<" ****************************************\n"<<endl;cout<<" * 欢迎您使用*\n"<<endl;cout<<" * 航班信息表*\n"<<endl;cout<<" ****************************************\n"<<endl;cout<<" 航班号起飞时间到达时间起飞站终点站班期机型票价\n"<<endl;}//显示主体信息void Cout_info2_1(Node p[])//方式一{cout<<" "<<p->info.flight_number;cout<<" "<<p->info.start_time;cout<<" "<<p->info.arrived_time;cout<<" "<<p->info.start_address;cout<<" "<<p->info.arrived_address; cout<<" "<<p->info.work_date;cout<<" "<<p->info.FlightType;cout<<" "<<p->info.fare<<"元"<<endl;}void Cout_info2_2(flight F[],int i)//方式二{cout<<" "<<F[i].flight_number;cout<<" "<<F[i].start_time;cout<<" "<<F[i].arrived_time;cout<<" "<<F[i].start_address;cout<<" "<<F[i].arrived_address; cout<<" "<<F[i].work_date;cout<<" "<<F[i].FlightType;cout<<" "<<F[i].fare<<"元"<<endl;}//显示所有航班信息void output_ALL_info1(Node element[]) //方式一{RadixList p=element;Cout_info1();p=p->next;while(p!=NULL){Cout_info2_1(p);p=p->next;}cout<<endl;}void output_ALL_info2(flight F[]) //方式二{Cout_info1();for(int i=0;i<N;i++){Cout_info2_2(F,i);}cout<<endl;}//--------------信息复制----------------//将排好的序列(链表)转化成顺序表存储形式void copy(flight F[],Node element[]){RadixList p=element;p=p->next;int i;for(i=0;i<N && p!=NULL;i++){strcpy(F[i].flight_number,p->info.flight_number);strcpy(F[i].start_time,p->info.start_time);strcpy(F[i].arrived_time,p->info.arrived_time);strcpy(F[i].start_address,p->info.start_address);strcpy(F[i].arrived_address,p->info.arrived_address);strcpy(F[i].work_date,p->info.work_date);strcpy(F[i].FlightType,p->info.FlightType);F[i].fare=p->info.fare;p=p->next;}}//---------------服务菜单--------------void F_By_Time(flight F[],int);void F_By_Address(flight F[],int);void F_By_fare(flight F[]);void F_By_FN(flight F[]);//主菜单void mainmenu(){char ch;int y;cout<<" 主菜单\n"<<endl;cout<<"===========================================================\n"<<endl;cout<<" Please choose: (input the number)(输入查询/排序命令)\n"<<endl; cout<<" 0. show the mainmenu (显示主菜单)\n"<<endl;cout<<" 1. Find by flight number(按航班号查询)\n"<<endl;cout<<" 2. Find by start time(按起飞时间查询)\n"<<endl;cout<<" 3. Find by arrived time(按到达时间查询)\n"<<endl;cout<<" 4. Find by start address(按起飞地点查询)\n"<<endl;cout<<" 5. Find by arrived address(按目的地点查询)\n"<<endl;cout<<" 6. Find by the fare(按票价范围查询)\n"<<endl;cout<<" ----其他键退出"<<endl;cout<<"===========================================================\n"<<endl;while(1){cout<<"请输入服务命令:";cin>>y;switch(y){case 0: mainmenu();break;case 1:F_By_FN(Flight);break;case 2:F_By_Time(Flight,1);break;case 3:F_By_Time(Flight,2);break;case 4:F_By_Address(Flight,1);break;case 5:F_By_Address(Flight,2);break;case 6:F_By_fare(Flight);break;default :cout<<" 谢谢惠顾!"<<endl;break;}cout<<"是否退出?(Y/N):";cin>>ch;if(ch=='Y'||ch=='y') break;}}//--------------查询系统--------------//通过航班号实现二分查找法查找void F_By_FN(flight F[]){int low=0,high=N,mid;char Num[10];cout<<"请输入您要查询的航班号:";cin>>Num;Cout_info1();//显示头部信息while(low<=high){mid=(low+high)/2;if(strcmp(Num,F[mid].flight_number)==0) {Cout_info2_2(F,mid);break;}else if(strcmp(Num,F[mid].flight_number)<0) high=mid-1;else low=mid+1;}cout<<" *************对不起,没有您要查找的航班号********** "<<endl;}//通过起飞/到达时间查询void F_By_Time(flight F[],int Time){int i;char T[6];cout<<"请输入您要查询的航班的起飞/抵达时间:";cin>>T;Cout_info1();//显示头部信息for(i=0;i<N;i++){if(Time==1) //按起飞时间查询{if(strcmp(T,F[i].start_time)==0) Cout_info2_2(F,i);}if(Time==2) //按抵达时间查询{if(strcmp(T,F[i].arrived_time)==0) Cout_info2_2(F,i);}}cout<<" *******对不起,该时间没有航班******* "<<endl;}//通过站点查询void F_By_Address(flight F[],int AD){char str[10];cout<<"请输入您要查询的航班的起飞/抵达地址:";cin>>str;Cout_info1();for(int i=0;i<N;i++){if(AD==1) //按起点站查询{if(strcmp(str,F[i].start_address)==0) Cout_info2_2(F,i);}if(AD==2) //按目的站查询{if(strcmp(str,F[i].arrived_address)==0) Cout_info2_2(F,i);}}cout<<" ********对不起,该站点不存在******** "<<endl; }//通过票价范围查询void F_By_fare(flight F[]){int T1,T2,i;cout<<"请输入您要查询的航班的最低票价(单位:元):";cin>>T1;cout<<"请输入您要查询的航班的最高票价(单位:元):";cin>>T2;Cout_info1();for(i=0;i<N;i++){if(T1<=F[i].fare && T2>=F[i].fare) Cout_info2_2(F,i);}cout<<" *******对不起,没有适合您的航班,请修改您的票价范围********" <<endl; }//--------------主函数----------------int main(){RadixList p=element;for(int i=0;i<N;i++)element[i].next=&element[i+1];element[10].next=NULL;radixSort(&p, D, R); //基数排序output_ALL_info1(element); //输出排序后的有序序列(航班信息)copy(Flight,element); //另存储排序后的航班信息mainmenu(); //给出主菜单return 0;}测试数据及测试结果:、边界值处理:四:遇到的问题及解决策略:首先是要实现所要的功能需用什么数据结构的问题,比如排序问题究竟用那一种,在组员的商量下和上网搜寻资料,采用对排序最符合,其次是在时间的查询过程中,比如输入时间16:40开始只能实现输入1640,最后通过改时间的数据类型实现了时间的输入,最后是在各个模块的组合过程中由于各个成员编程所起的名字或者其他原因,程序无法运行,最后在大家的努力下一起修改错误使得程序可以正常运行。
c++数据结构课程设计代码以下是一个简单的C++数据结构课程设计示例,它实现了一个基本的链表数据结构:cpp.#include <iostream>。
// 定义链表节点结构。
struct Node {。
int data;Node next;};// 链表类。
class LinkedList {。
private:Node head; // 头节点指针。
public:// 构造函数。
LinkedList() {。
head = nullptr;}。
// 插入节点到链表头部。
void insert(int value) {。
Node newNode = new Node;newNode->data = value;newNode->next = head;head = newNode;}。
// 删除节点。
void remove(int value) {。
Node currNode = head;Node prevNode = nullptr;while (currNode != nullptr && currNode->data != value) {。
prevNode = currNode;currNode = currNode->next;}。
if (currNode == nullptr) {。
std::cout << "节点不存在" << std::endl; return;}。
if (prevNode == nullptr) {。
head = currNode->next;} else {。
prevNode->next = currNode->next;}。
delete currNode;}。
// 打印链表。
void print() {。
Node currNode = head;while (currNode != nullptr) {。
数据结构课程设计报告含代码HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。
二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1. 可以手动创建一个校园图。
2. 可以直接从文件读取校园各个景点的信息。
3. 可选择从任意个景点作为起点进行遍历。
4. 输入景点序号查询该景点相关信息。
5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。
6. 将校园图信息保存入文件。
四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g即结构体对象在main()中被创建在其他子函数中进行参数传递。
2. 全局变量visited数组中用。
3. 全局变量shorest[][],path[][]在floyd()中被赋值来分别记录v[i]-v[j]最短路径和 v[i]-v[j]所经过景点。
3.重点设计及编码两景点最短距离弗洛伊德算法void floyd(adjmatrix *g){int i,j,k;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)shortest[i][j]=0;for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){shortest[i][j]=g->arcs[i][j].adj;path[i][j]=0;}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(k=0;k<g->vexnum;k++)if(shortest[i][j]>(shortest[i][k]+shortest[k][j])){shortest[i][j]=shortest[i][k]+shortest[k][j];path[i][j]=k;path[j][i]=k;}}五.测试数据及运行结果1.正常测试数据和运行结果要求提供3组正常测试数据和运行结果2(遍历功能)1(起始景点序号)1 校门呈长方形,校训:爱国、求实、奋进2 喷泉呈鸽子形状,喷射出水花3 教学楼传授知识和学习知识4 实验楼供学生进行课程实验和教师办公5 洗浴中心供学生洗澡,内设单人间和双人间6 美食广场仅一层,快餐味道不错7 图书馆共七层,存储大量书籍供学生查阅和学习8 旭日苑共三层,主要的就餐场所9 体育馆内设篮球场,羽毛球场和观看席10 宿舍休息的场所5(查询景点信息)2(景点序号)2 喷泉呈鸽子形状,喷射出水花6(查询两景点最短路径)1 9(两景点序号)1->2->7->91->9 最短距离:570米2.异常测试数据及运行结果要求提供2组异常测试数据和运行结果9无此功能模块请重新输入5(功能模块)11(景点序号)无此景点请重新输入六.调试情况,设计技巧及体会1.改进方案1. 可将景点文件,边文件及账户密码合并为一个文件。
数据结构课程设计报告学院专业:软件工程班级:学号:学生姓名:指导老师:彭伟民日期: 2016.01.01目录1猴子吃桃子问题 (3)1.1 需求分析 (3)1.2 程序设计思想 (3)1.3 程序源代码 (3)1.4 程序运行结果 (5)2进制数转化问题 (5)2.1 需求分析 (5)2.2 程序设计思想 (6)2.3 程序源代码 (6)2.4 程序运行结果 (7)3长整数运算 (8)3.1 需求分析 (8)3.2 程序设计思想 (8)3.3 程序源代码 (8)3.4 程序运行结果 (12)4学生成绩管理系统 (13)4.1 需求分析 (13)4.2 程序设计思想 (13)4.3 程序源代码 (14)4.4 程序运行结果 (20)5哈夫曼编码应用 (22)5.1 需求分析 (22)5.2 程序设计思想 (22)5.3 程序源代码 (23)5.4 程序运行结果 (24)6学校超市选址问题 (26)6.1 需求分析 (26)6.2 程序设计思想 (26)6.3 程序源代码 (26)6.4 程序运行结果 (30)7学生成绩管理系统 (30)7.1 需求分析 (30)7.2 程序设计思想 (30)7.3 程序源代码 (30)7.4 程序运行结果 (36)8排序综合 (37)8.1 需求分析 (37)8.2 程序设计思想 (38)8.3 程序源代码 (38)8.4 程序运行结果 (46)9课程设计总结 (47)1猴子吃桃子问题1.1需求分析有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
1.2程序设计思想已知第十天只余下1个桃子,第一天开始每天都吃当前桃子一半再多一个,那么就只需要从第十天开始倒推即可,用链表、数组、递推、常规方法都可以采用这种思路实现计算第一天桃子数量。
1.3程序源代码#include<iostream>using namespace std;//有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
#include <stdio.h>#include<stdlib.h>#include <string.h>#include<malloc.h>#define MAXSIZE 1000typedef char DataType;typedef struct node{DataType ch[MAXSIZE];struct node *next;}Lstring;/*****输入文章*****/Lstring *input(){Lstring *p,*head;int i=0;printf ("请输入一页文章,若要换行,请直接敲回车键,若想结束请按@:\n");p=(Lstring *)malloc(sizeof(Lstring));head=p;p->ch[i]=NULL;p->next=NULL;char str[200];while(1){gets(str);if(strlen(str)>100){printf("每行最多输入100字符");break;}if(str[0]==64){str[0]='\0';p->ch[0]=str[0];break;}p->next=(Lstring *)malloc(sizeof(Lstring));strcpy(p->ch,str);if(str[strlen(str)-1]==64){p->ch[strlen(str)-1]='\0';break;}p=p->next;}p->next=NULL;return head;}/****输出文章*****/Lstring *OutPut(Lstring *head){Lstring *p=head;do{printf("%s\n",p->ch);}while((p=p->next)!=NULL);return head;}/****统计字母的个数*****/int Alphabet(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if((p->ch[i]>='a'&&p->ch[i]<='z')||(p->ch[i]>='A'&&p->ch[i]<='Z')) count++;}while((p=p->next)!=NULL);return count;}/****统计数字的字数*****/int Num(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if(p->ch[i]>='0' && p->ch[i]<='9')count++;}while((p=p->next)!=NULL);return count;}/****统计空格的字数*****/int Space(Lstring *head){Lstring *p=head;int count=0;do{int Len;Len=strlen(p->ch);for(int i=0;i<Len;i++)if(p->ch[i]==32)count++;}while((p=p->next)!=NULL);return count;}/*统计文章的总字数*/int All(Lstring *head){Lstring *p=head;int count=0;do{count+=strlen(p->ch);}while((p=p->next)!=NULL);return count;}/****串的简单模式匹配*****/int FindString(Lstring *head,char *str){Lstring *p=head;int count=0;int h=0;int len1=0;int len2=strlen(str);int i,j,k;do{len1=strlen(p->ch);for(i=0;i<len1;i++){if(p->ch[i]==str[0]){k=0;for(j=0;j<len2;j++)if(p->ch[i+j]==str[j]) k++;if(k==len2){count++;i=i+k-1;}}}}while((p=p->next)!=NULL);return count;}void delstringword(char *s,char *str){char *p;int count,len,i,j;char s1[80];p=strstr(s,str);len=strlen(s);i=len-strlen(p);j=i+strlen(str);count=0;for(int m=0;m<i;m++)s1[count++]=s[m];for(int n=j;n<len;n++)s1[count++]=s[n];s1[count]='\0';strcpy(s,s1);}Lstring *DelString(Lstring *head,char *str){Lstring *p=head;do{while(strstr(p->ch,str)!=NULL)delstringword(p->ch,str);}while((p=p->next)!=NULL);return head;}void main(){int i=0;int m;Lstring *head;char s1[20],s2[20];head=input();printf("输入的文章为:\n");head=OutPut(head);printf("\n");printf("全部字母数:%d \n",Alphabet(head));printf("数字个数:%d \n",Num(head));printf("空格个数: %d \n",Space(head));printf("文章总字数: %d \n",All(head));printf("\n");printf("**********************\n");printf("* 菜单 *\n");printf("**********************\n");printf("* 1---统计字符串 *\n");printf("* 2---删除字符串 *\n");printf("* 0---退出 *\n");printf("**********************\n");do{printf("请输入你要选择的操作(0~2):");scanf("%d",&m);switch(m){case 0:exit(0);break;case 1:printf("请输入要统计的字符串:");scanf("%s",&s1);printf("%s在文章中出现的次数为:%d \n",s1,FindString(head,s1));printf("\n");break;case 2:printf("请输入要删除的某一字符串:");scanf("%s",&s2);head=DelString(head,s2);printf("删除%s后的文章为:\n",s2);OutPut(head);break;}}while(m!=0);}。
数据结构课程设计代码根据提供的输入输出需求,下面是一个示例的数据结构课程设计代码。
```pythonclass Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef add(self, data):new_node = Node(data)if self.head is None:self.head = new_nodeelse:current = self.headwhile current.next is not None:current = current.nextcurrent.next = new_nodedef remove(self, data):current = self.headprev = Nonewhile current is not None:if current.data == data:if prev is None:self.head = current.next else:prev.next = current.next returnprev = currentcurrent = current.nextdef display(self):current = self.headwhile current is not None:print(current.data, end=" ")current = current.nextprint()if __name__ == "__main__":linked_list = LinkedList()while True:print("1. Add element")print("2. Remove element")print("3. Display elements")print("4. Quit")choice = input("Enter your choice: ")if choice == "1":data = input("Enter element to add: ")linked_list.add(data)elif choice == "2":data = input("Enter element to remove: ")linked_list.remove(data)elif choice == "3":linked_list.display()elif choice == "4":breakelse:print("Invalid choice")```这个代码示例实现了一个简单的链表数据结构,在命令行中提供了添加元素、删除元素和显示元素的选项。
算法与数据结构课程设计报告设计题目:专业班级学生学号指导教师2014年第1学期第一部分:需求分析1、系统名称:航空客运订票系统航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。
要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
2、要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。
(2)作为模拟系统,全部数据可以只存放在内存中。
(3)通过此系统可以实现如下功能:①录入功能:可以录入航班情况②查询功能:根据客户提供的终点站名进行查询,可以输出以下信息:航班号、飞机号、星期几飞行和余票量等。
也可以根据航班号,查询飞机某个航线的情况。
③订票功能:根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。
如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。
④退票功能:根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。
第二部分:系统设计图样一:设计说明1:添加航班:整个航班的信息保存在一个结构体flight中,采用结构体数组,每一个航班信息包含航班号、起飞时间、起飞城市、降落时间、降落城市、余票数量。
航班信息通过lulu()函数进行添加。
添加的信息保存在航班flight结构体数组中。
2:查询航班:查询板块分为两个部分,按姓名查找和按站名查找。
按姓名查找:通过所输入的姓名和已定客户的姓名相匹配,匹配成功则查找成功。
按站名查找:通过所输入的起始站名和终点站名进行匹配,匹配成功则查找成功。
3:订票功能:根据用户的姓名和航班号进行订票,如果所查找的航班号的余票满足用户需要的票数,则订票成功,该信息保存在Customer中,才用结构体数组,包含已定客户的姓名、客户ID、订的票数、起飞时间、起飞城市、降落时间、降落城市、航班号。
西安邮电学院数据结构课程设计报告题目:校园导航系统院系名称:计算机学院专业名称:计算机科学与技术班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年12月11日~2011年12月15日一. 设计目的1.通过本次课程设计巩固《数据结构》中所学的内容;2.提高自己上机编程以及调试能力。
二. 设计内容1.设计所在学校的校园平面图,所含景点不少于10个。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计1.功能模块图;2.各个模块详细的功能描述。
1. 可以手动创建一个校园图。
2. 可以直接从文件读取校园各个景点的信息。
3. 可选择从任意个景点作为起点进行遍历。
4. 输入景点序号查询该景点相关信息。
5. 输入两个景点查询两个景点的最短,最佳及其所有的路径。
6. 将校园图信息保存入文件。
主程序 景点信息介绍输入各个景点的遍历校园平面图显示图的建立与修改景点信息路径查询文件的读取与保存密码退出程序四.详细设计1.功能函数的调用关系图2.各功能函数的数据流程图1. Adjmatrix *g 即结构体对象在main()中被创建在其他子函数中进行参数传递。
判断密码显示menu调用相应函数 返回主菜单密码3次错误密码正确输入密码具体分函数退出程序开始管理系统程序是否退出?执行函数相应的操作arcnumfile() vernumfile() readvernum() floyd() creatdn() shortload() search() locatevertex() findvernum() depthfirstsearch() creatvisited() readarcnum() main()2. 全局变量visited数组visited数组在creatvisited()中被初始化,然后再在depthfirstsearch()中用。
课程设计报告(一)一.报告题目:学生管理系统二.实验目的:1.熟悉线性链表,掌握线性链表的基本操作;2.练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。
3.通过文件保存和读取文件来提升文件操作的能力;4.C语言编程能力的提升训练。
三.实验环境:C语言编程,VC++6.0编程工具实现。
四.软件系统结构1.总体架构/层次:2.各功能的实现流程图:函数6:文件装入功能实现流程图函数7:文件保存功能实现流程图函数8:退出菜单功能实现流程图五.软件功能设计:本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。
本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:1.用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;2.利用结点的指针域访问某个结点的前驱或者后继;3.录入新学生信息并按非降序插入到链表中;4.查找给定学号的结点学生信息;5.删除给定学号的结点学生信息;6.修改给定学号的结点学生信息;7.显示全部结点的学生信息;8.将链表中的学生信息全部存入文件;9.将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;六.源程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#define NAMELEN 15#define ADDRLEN 10#define TELLEN 15#define OVERFLOW 0#define ERROR 0#define FALSE 0#define OK 1#define TRUE 1struct stud{ long num;char name[NAMELEN+1];char sex;int age;char Addr[ADDRLEN+1];long rxsj;char lxfs[TELLEN+1];};typedef stud ElemType;//链表结点元素为结构体FILE *fp;typedef struct LNode{ElemType data;LNode *next;} *LinkList;//typedef LNode *;int InitList(LinkList &L){ //操作结果:构造一个空的线性表LL=(LinkList )malloc(sizeof(LinkList));//产生头结点,并使L指向头结点if(!L)//存储分配失败exit(OVERFLOW);L->next=NULL;// 指针域为空return OK;}int ListTraverse(LinkList L,void(*vi)(ElemType)){//条件:线性表已存在//操作结果:一次对L的每个数据元素调用函数vi()。
第一章系统目标〔三号楷体加粗〕仓库管理应用程序系统可以实现信息屡次追参加录、信息显示、删除信息、修改信息、查询信息、价格升序等根本功能,这些功能模块都用函数的形式来实现。
学生信息保存在文件中,需要时可以随时从文件中读取出来。
方便用户随时可查询。
进行仓库管理。
第二章系统分析〔三号楷体加粗〕正文〔四号楷体〕明确用户的需求,如操作界面需求,系统功能需求,数据的具体流程等。
开始运行时界面如下:你可以根据所对应的信息提示进行操作便可对其进行数据的记录与查询。
第三章系统设计第四章系统实现正文〔四号楷体〕给出具体的实现环境〔如用什么语言?在什么操作系统?〕用C语言编程,用cokeblock编译器,在windows xp操作系统下编译成功。
给出主函数和每个算法的实现代码。
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<ctype.h>#include<string.h>#define SIZE 100typedef struct{char name[10];char fam[10];int pay;int num;}Store;typedef struct node{Store elem;struct node *next;}In;In *head=NULL;void appendInfo();void List();void menu(void);In*Init();void Start();void Insert();void Del();void renew();void Wsave();void Read();void SortUp();void PreFile();int main(){char select;PreFile();menu();while((select=toupper(getch()))!='0'){system("cls");switch (select){case '1' :{Start();system("pause");menu();break;}case '2':{appendInfo();system("pause");menu();break;}case '3':{Insert();system("pause");menu();break;}case '4':{Del();system("pause");menu();break;}case '5':{renew();system("pause");menu();break;}case '6':{List();system("pause");menu();break;}case '7':{SortUp();system("pause");menu();break;}case 'W':{Wsave();system("pause");menu();break;}case 'R':{Read();system("pause");menu();break;}default:printf("Input error!\n");system("pause");menu();break;}}return 0;}In*Init(){In*L;L=(In*)malloc(sizeof(In));L->next=NULL;return L;}void appendInfo(){int i,j;In*p,*s;A1:printf("请输入要存放的记录数:");scanf("%d",&j);if(j<=0){printf("Input error!\n");goto A1;}if(head==NULL){p=Init();head=p;}else{p=head->next;while(p->next!=NULL)p=p->next;}for(i=0;i<j;i++){s=Init();printf("名称品牌单价数量\n");scanf("%s",&s->);scanf("%s",&s->elem.fam);scanf("%d",&s->elem.pay);scanf("%d",&s->elem.num);p->next=s;p=s;}}void List(){In *p;if(head==NULL){printf("None of information about products.\n");return;}elsep=head->next;printf("名称品牌单价数量\n");while(p!=NULL){printf("%s\t%s\t%d\t%d\n",p->,p->elem.fam,p->elem.pay,p->elem.num);p=p->next;}}void menu(){system("cls");printf("|-------------------------------------------|\n");printf(" |---------------家电仓库管理----------------|\n");printf(" | 请输入选项编号|\n");printf("|-------------------------------------------|\n");printf(" | 1--数据初始化|\n");printf(" | 2--创立数据表|\n");printf(" | 3--数据插入|\n");printf(" | 4--数据删除|\n");printf(" | 5--数据更新|\n");printf(" | 6--数据查询|\n");printf(" | 7--单价升序|\n");printf(" | w--数据保存|\n");printf(" | r--数据读出|\n");printf(" | 0--系统退出(exit) |\n");printf("|-------------------------------------------|\n");printf("请输入你的选择:");}void Start(){char com;printf("你想清空所有资料吗?〔Y/N〕:");fflush(stdin);com=getchar();if(com=='Y'||com=='y'){printf("已经初始化了、、、\n");head=NULL;return;}else printf("资料仍在、、、\n");return ;}void Insert(){In*pi,*p;char str[10];printf("请问要在哪个学生后面插入〔输入姓名〕:");fflush(stdin);gets(str);pi=Init();printf("名称品牌单价数量\n");scanf("%s",&pi->);scanf("%s",&pi->elem.fam);scanf("%d",&pi->elem.pay);scanf("%d",&pi->elem.num);if(head==NULL){printf("前面没有数据,默认接在表头。
大二数据结构课程设计代码一、课程目标知识目标:1. 学生能够掌握数据结构的基本概念和原理,包括线性表、树、图等结构的特点和应用场景。
2. 学生能够理解和运用常用的算法,如排序算法、查找算法、遍历算法等,并能够分析其时间复杂度和空间复杂度。
3. 学生能够掌握代码编写规范和调试技巧,编写出结构清晰、可读性强、效率高的数据结构实现代码。
技能目标:1. 学生能够运用所学的数据结构知识,设计并实现小型数据结构项目,解决实际问题。
2. 学生能够运用编程语言(如C/C++/Java等)进行数据结构相关算法的实现和优化,具备一定的代码调试能力。
3. 学生能够通过团队协作和交流,合理分工,共同完成课程设计任务,提高项目管理和团队协作能力。
情感态度价值观目标:1. 学生培养对数据结构学科的兴趣和热情,认识到数据结构在计算机科学中的重要性。
2. 学生在学习过程中,树立良好的编程习惯,注重代码质量,培养认真、严谨的学习态度。
3. 学生能够通过课程设计,体验解决实际问题的成就感,增强自信心,激发进一步探索数据结构领域的欲望。
本课程目标旨在帮助学生系统地掌握数据结构知识,培养实际编程能力,同时注重培养团队协作和情感态度价值观,使学生在理论知识与实践操作中找到平衡,为后续相关课程和实际工作打下坚实基础。
二、教学内容本课程教学内容紧密围绕课程目标,选取以下重点内容进行组织:1. 数据结构基本概念:包括线性表、栈、队列、树、图等结构的基本定义、性质和操作。
2. 常用算法分析:讲解排序算法(冒泡排序、快速排序等)、查找算法(二分查找、哈希查找等)以及遍历算法(深度优先搜索、广度优先搜索等)。
3. 代码编写与调试:介绍编程规范、调试技巧以及性能优化。
4. 数据结构应用实例:分析实际案例,如链表实现、二叉树遍历、图的最短路径等。
教学内容安排如下:第一周:数据结构基本概念及线性表的应用。
第二周:栈、队列和串的基本操作及实现。
第三周:树和二叉树的概念、遍历算法及应用。
上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计内容说明1. 项目一(1) 对设计任务内容的概述学生成绩管理**任务:要求实现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。
存储结构:采用线性链式结构。
(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。
并将其存入链表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
数据结构课程设计:文章编辑系统源代码#include"stdio.h"#include"string.h"#include"math.h"#include"malloc.h"#include#include#include"time.h"#include#include#include#include"stdlib.h"#pragma comment(lib,"WinMM.Lib")typedef struct Line{char data[100];//每行内容用这样一个结点存放struct Line *next;}Line,*Article;int m=0;//该全局变量用来改变系统所使用的语言..登录时默认语言为中文int times;//此全局变量为删除和替换字符串时使用int ii;//跟times同一功能int tt=0;int colori=1;int music=0;//设置系统颜色void color(){int col;col=colori;if(m!=1){printf("\t\t ¤1.黑底白字");printf("\t\t●2.蓝底红字\n");printf("\t\t ¤3.白底黑字");printf("\t\t●4.绿底红字\n");printf("\t\t ¤5.红底绿字");printf("\t\t●6.白底紫字\n");printf("\t\t ¤7.紫底白字");printf("\t\t●8.黑底黄字\n");printf("\t\t ¤9.黑底蓝字");printf("\t\t●10.黑底灰字\n");printf("\t\t ¤11.白底红字");printf("\t●0.返回\n\n");printf("\t 请输入你要更换的颜色并回车:"); scanf("%d",&colori);if(colori==0)colori=col;switch(colori){case 1:system("color 07");break;case 2:system("color 9c");break;case 3:system("color f0");break;case 4:system("color 2c");break;case 5:system("color c2");break;case 6:system("color fd");break;case 7:system("color df");break;case 8:system("color 0e");break;case 9:system("color 09");break;case 10:system("color 08");break;case 11:system("color fc");break;case 0:break;default:printf("\t\t输入错误!");system("pause");break;}}else{printf("\t ¤1.Black and White");printf("\t\t●2.Blue and Red\n");printf("\t ¤3.White and Black");printf("\t\t●4.Green and Red\n");printf("\t ¤5.Red and Green");printf("\t\t●6.White and purple\n");printf("\t ¤7.Purple and White");printf("\t●8.Black and Yellow\n");printf("\t ¤9.Black and Blue");printf("\t\t●10.Black and Gray\n");printf("\t ¤11.White and Red");printf("\t\t●0.Exit\n\n");printf("\t Please select the number of color and then preass enter:");scanf("%d",&colori);if(colori==0)colori=col;switch(colori){case 1:system("color 07");break;case 2:system("color 9c");break;case 3:system("color f0");break;case 4:system("color 2c");break;case 5:system("color c2");break;case 6:system("color fd");break;case 7:system("color df");break;case 8:system("color 0e");break;case 9:system("color 09");break;case 10:system("color 08");break;case 11:system("color fc");break;case 0:break;default:printf("\t\tERROR!");system("pause");break; }}}void restorecolor(){switch(colori){case 1:system("color 07");break;case 2:system("color 9c");break;case 3:system("color f0");break;case 4:system("color 2c");break;case 5:system("color c2");break;case 6:system("color fd");break;case 7:system("color df");break;case 8:system("color 0e");break;case 9:system("color 09");break;case 10:system("color 08");break;case 11:system("color fc");break;}}//从文件中读取void ReadFile(Article &head){Line *p,*tail=head;char s[100];FILE *fp;if((fp=fopen("D:\\article.txt","r"))==NULL)//先判断文章是否存在{if(m!=1)printf("\n\t\t无法读取article.txt文件中的文章!\n");elseprintf("\n\t\tthe file of article.txt can't be read!\n");return;}while((fgets(s,100,fp))!=NULL){s[strlen(s)-1]='\0';p=(Line*)malloc(sizeof(Line));p->next=NULL;strcpy(p->data,s);if(head==NULL)head=p;elsetail->next=p;tail=p;}if(m!=1)printf("\n\t\t已成功从D盘的article.txt目录中读取文章!\n");elseprintf("\n\t\tThe article in D:\article.txt has succeed to read!\n");fclose(fp);}//更改后保存到文件中void SaveArticle(Article head){FILE*fp;char s[100];int n;Line *p=head;if((fp=fopen("D:\\article.txt","w"))==NULL){if(m!=1)printf("\n\t\t无法打开article.txt文件中的文章!\n");elseprintf("\n\t\tCan not open file article.txt!\n");return;}while(p != NULL) //将文章写入文件中{strcpy(s,p->data);n=strlen(s);s[n]='\n';s[n+1]='\0';fputs(s,fp);p=p->next;}fclose(fp);}//是否要保存到文本中??...新建文章void CreateFile(Article head){FILE*fp;char s[100];int n;Line *p=head;if((fp=fopen("D:\\article.txt","w"))==NULL){if(m!=1)printf("\n\t\t无法打开article.txt文件中的文章!\n"); elseprintf("\n\t\tCan not open file article.txt!\n"); return;}while(p!=NULL) //将文章写入文件中{strcpy(s,p->data);n=strlen(s);s[n]='\n';s[n+1]='\0';fputs(s,fp);p=p->next;}if(m!=1)printf("\n\t\t文章已成功写入D盘的article.txt目录中!\n");elseprintf("\n\t\tThe article has been successfully written in the D:article.txt!\n");fclose(fp);}//是否现在输入内容在指定盘里存放该文章void CreateArticle(Article &head){Line *p,*tail;char ch[100];if(m!=1)printf("\n\t\t请输入文章内容(按ctrl+e结束):\n");elseprintf("\n\t\tPlease input the content,end with (ctrl+e):\n");while(1){gets(ch);p=(Line*)malloc(sizeof(Line));p->next=NULL;strcpy(p->data,ch);if(p->data[strlen(p->data)-1]==5) {p->data[strlen(p->data)-1]='\0'; break;}if(head==NULL){head=p;tail=p;}else{tail->next=p;tail=tail->next;}}if(strlen(p->data)>0){if(head==NULL){head=p;tail=p;}else{tail->next=p;tail=tail->next;}}}//是否保存文章到指定目录的文件void IsSave(Article head){char ch;if(m!=1)printf("\t\t是否要将文章保存到指定目录的文件中?\n\t\t若是,请输入Y,若否,按其它任意键:");elseprintf("\t\tDo you want to save the file to the directory?\n\t\tIf yes,please input Y,or input any keys:");ch=getchar();if(ch=='Y'||ch=='y')CreateFile(head);}//计算中文个数int CountChinese(Article head){int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if(p->data[i]<0)num++;}p=p->next;}return num/2;}//计算字母个数int CountLetter(Article head){int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if(('a'<=p->data[i]&&'z'>=p->data[i])||('A'<=p->data[i]&&' Z'>=p->data[i]))num++;}p=p->next;}return num;}//计算空格个数int CountSpace(Article head) {int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if(p->data[i]==' ')num++;}p=p->next;}return num;}//计算数字个数int CountFigure(Article head){int num=0;Line *p=head;int i;int n;while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++){if('0'<=p->data[i]&&p->data[i]<='9')num++;}p=p->next;}return num;}//计算总字数int CountArticle(Article head){int num=0;num=CountLetter(head)+CountSpace(head)+CountFigure(h ead)+CountChinese(head);return num;}//找串...统计某一字符串在文章中出现的次数,并输出该次数int FindString(Article head,char *s){int num=0;Line *p=head;int i,j,k=1,t;int n,mm;while(p!=NULL){n=strlen(p->data);mm=strlen(s);for(i=0;i<=(n-mm);){k=1;for(j=i,t=0;t<mm;j++,t++)if(p->data[j]!=s[t]){k=0;break;}if(k){num++;i=i+strlen(s);}else}p=p->next;}return num;}//删除模块(删除全部要删除的串)char* delstring1(char *ch,char *s) {int n=strlen(ch),mm=strlen(s); int i,j,k,t;for(i=0;i<=n-mm;){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t]){k=0;break;}if(k){for(j=i;j<n;j++)ch[j]=ch[j+mm];ch[j]='\0';}elsen=strlen(ch);}return ch;}//全部删除void DeleteString1(Article &head,char *s){Line *p=head;while(p!=NULL){strcpy(p->data,delstring1(p->data,s));p=p->next;}if(m!=1)printf("\t\t全部已成功删除!\n");elseprintf("\t\tDelete all successfully!\n");}void delprint(char *ch,char *s){int i;int mm=strlen(s);char c[100];int k;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_G</n;j++)</mm;j++,t++)</mm;j++,t++)</n;i++)</n;i++)</n;i++)</n;i++)REEN);for(i=ii,k=0;i<ii+mm;i++,k++)c[k]=ch[i];c[k]='\0';printf("%s",c);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN DLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);}//判断该行是否出现该字符串,出现返回1int deljudge(char *ch,char *s){int n=strlen(ch),mm=strlen(s);int i,j,k,t;for(i=ii;i<=n-mm;i++){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t])k=0;break;}if(k){times++;ii=i;return 1;}}return 0;}char* delstring2(char *ch,char *s) {int n=strlen(ch),mm=strlen(s); int i,j,k,t;for(i=ii;i<=n-mm;i++){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t]){k=0;break;}if(k)for(j=i;j<n;j++)ch[j]=ch[j+mm];ch[j]='\0';ii=i;break;}}if(m!=1)printf("\t\t删除成功!\n");elseprintf("\t\tDelete successfully!\n");return ch;}//删除模块(删除一个指定位置要删除的串)void DeleteString2(Article &head,char *s){Line *p=head;int flag;char c;int mm=strlen(s);int i;ii=0;times=0;while(p!=NULL) //这里出现的问题应该还是读入问题1!!{flag=deljudge(p->data,s);if(flag)if(m!=1)printf("\t\t第%d次出现该字符串的所在行如下:\n",times);elseprintf("\t\tThe line that this string appears the %d time is:\n",times);for(i=0;i<ii;i++)printf("%c",p->data[i]);delprint(p->data,s);for(i=ii+mm;idata);i++)printf("%c",p->data[i]);printf("\n");if(m!=1)printf("\t\t是否要删除?\n\t\tY是,N否:");elseprintf("\t\tDelete or not?\n\t\tY to yes,N to no:");c=getchar(); getchar();if(c=='Y'||c=='y')strcpy(p->data,delstring2(p->data,s));elseii+=mm;printf("\n");if(m!=1)printf("\t\t是否要继续删除?\n\t\tY是,N否:");elseprintf("continue to delete?\n\t\tY to yes ,N to no:");c=getchar();getchar();if(c=='N'||c=='n')break;}else{p=p->next;ii=0;}}if(m!=1)printf("\t\t删除结束!\n");elseprintf("\t\tDeleting ends!\n");}//删除管理模块void deletemanage(Article &head,char *s){int choice;if(m!=1)printf("\t\t1.全部删除\n\t\t2.部分删除\n\n\t\t请选择:");elseprintf("1.Delete all\n 2.Delete sections\n\n\t\tPlease select:"); scanf("%d",&choice);getchar();if(choice==1)DeleteString1(head,s);elseDeleteString2(head,s);}//字符串替换//全部替换char* repstring1(char *ch,char *s1,char *s2) {int n,mm,x,y;int i,j,k,t;n=strlen(ch);mm=strlen(s1);for(i=0;i<=n-mm;){k=1;for(j=i,t=0;t<mm;t++,j++)if(ch[j]!=s1[t]){k=0;break;}if(k){x=strlen(s2);if(x<=mm){for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t</x;t++,j++)</mm;t++,j++)</ii;i++)</n;j++)</mm;j++,t++)</mm;j++,t++)</ii+mm;i++,k++)];for(t=mm+i;j<n;j++,t++)ch[j]=ch[t];ch[j]='\0';}else{y=x-mm;for(t=n-1;t>=mm+i;t--)ch[t+y]=ch[t];ch[n+y]='\0';for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t];}i=i+x;}elsei++;}return ch;}void ReplaceString1(Article &head,char *s1,char *s2)//s2替换s1{Line *p=head;while(p!=NULL){strcpy(p->data,repstring1(p->data,s1,s2));p=p->next;}if(m!=1)printf("\t\t全部已成功替换!\n");elseprintf("\t\tReplace all successfully!\n");}//部分替换void repprint(char *ch,char *s){int i;int mm=strlen(s);char c[100];int k;SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN DLE), FOREGROUND_RED | FOREGROUND_GREEN);for(i=ii,k=0;i<ii+mm;i++,k++)c[k]=ch[i];c[k]='\0';printf("%s",c);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAN DLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);}int repjudge(char *ch,char *s){int n=strlen(ch),mm=strlen(s);int i,j,k,t;for(i=ii;i<=n-mm;i++){k=1;for(j=i,t=0;t<mm;j++,t++)if(ch[j]!=s[t]){k=0;break;}if(k){times++;ii=i;return 1;}}return 0;}char* repstring2(char *ch,char *s1,char *s2) {int n,mm,x,y;int i,j,k,t;n=strlen(ch);mm=strlen(s1);for(i=ii;i<=n-m;i++){k=1;for(j=i,t=0;t<mm;t++,j++)if(ch[j]!=s1[t]){k=0;break;}if(k){x=strlen(s2);if(x<=mm){for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t];for(t=mm+i;j<n;j++,t++)ch[j]=ch[t];ch[j]='\0';}else{y=x-mm;for(t=n-1;t>=mm+i;t--)ch[t+y]=ch[t];ch[n+y]='\0';for(j=i,t=0;t<x;t++,j++)ch[j]=s2[t];}ii=i+strlen(s2);break;}}if(m!=1)printf("\t\t替换成功!\n");elseprintf("\t\tReplace successfully!\n");return ch;}void ReplaceString2(Article &head,char *s1,char *s2)//s2替换s1{Line *p=head;int flag;char c;int i;int mm=strlen(s1);ii=0;times=0;while(p!=NULL){flag=repjudge(p->data,s1);if(flag){if(m!=1)printf("\t\t第%d次出现该字符串的所在行如下:\n",times);elseprintf("\t\tThe line that this string appears the %d time is:\n",times);for(i=0;i<ii;i++)printf("%c",p->data[i]);repprint(p->data,s1);for(i=ii+mm;idata);i++)printf("%c",p->data[i]);printf("\n");if(m!=1)printf("\t\t是否要替换?\n\t\tY是,N否:");elseprintf("\t\tReplace or not?\n\t\tY to yes ,N to no:");c=getchar(); getchar();if(c=='Y'||c=='y')strcpy(p->data,repstring2(p->data,s1,s2));elseii+=mm;printf("\n");if(m!=1)printf("\t\t是否要继续替换?\n\t\tY是,N否:");elseprintf("\t\tContinue to replace?\n\t\tY to yes ,N to no:");c=getchar();getchar(</ii;i++)</x;t++,j++)</n;j++,t++)</x;t++,j++)</mm;t++,j++)</mm;j++,t++)</ii+mm;i++,k++)</x;t++,j++)</n;j++,t++));if(c=='N'||c=='n')break;}else{p=p->next;ii=0;}}if(m!=1)printf("\t\t替换结束!\n");elseprintf("\t\tReplacing ends!\n");}void PrintArticle(Article head);//删除和替换结束后是否输出删除后或替换后的文章void IsPrint(int mm,Article head){char ch;if(mm==1){if(m!=1)printf("\t\t是否要输出续写后的文章?\n\t\tY是,N否:");elseprintf("\t\tDo you want to output the followed article?\n\t\tY to yes,N to no:");ch=getchar();if(ch=='Y'||ch=='y')PrintArticle(head);}if(mm==2){if(m!=1)printf("\t\t是否要输出替换后的文章?\n\t\tY是,N否:");elseprintf("\t\tDo you want to output the replaced article?\n\t\tY to yes,N to no:");ch=getchar();if(ch=='Y'||ch=='y')PrintArticle(head);}}//替换管理模块void replacemanage(Article &head,char *s1,char*s2){int choice;if(m!=1)printf("\t\t1.全部替换\n\t\t2.部分替换\n\n\t\t请选择:");elseprintf("\t\t1.Replace all\n\t\t2.Replace sections\n\n\t\tPlease select:");scanf("%d",&choice);getchar();if(choice==1)ReplaceString1(head,s1,s2);elseReplaceString2(head,s1,s2);}void PrintArticle(Article head){Line *p;int n,i;p=head;if(head==NULL){if(m!=1)printf("\t\t该文章中没有内容!\n");elseprintf("\t\tThe article is empty!\n"); }else{if(m!=1){ printf("\n\n\n ┎━━━━━━━━━━┒\n"); printf(" ┃ 该文章的内容如下┃\n"); printf(" ┖━━━━━━━━━━┚\n\n");}else{printf("\n\n\n ┎━━━━━━━━━━┒\n"); printf(" ┃ The article is ┃\n");printf(" ┖━━━━━━━━━━┚\n\n");}}while(p!=NULL){n=strlen(p->data);for(i=0;i<n;i++)printf("%c",p->data[i]);printf("\n");p=p->next;}}//追加模块void CatchArticle(Article &head){Line*p=head,*tail;char ch[100];if(m!=1)printf("\t\t请输入要续写的文章内容(按ctrl+e结束):\n");elseprintf("\t\tPlease input the content following with the article(end with ctrl+e):\n");if(head==NULL){CreateArticle(head);}else{while(p->next!=NULL)p=p->next;tail=p;while(1){gets(ch);p=(Line*)malloc(sizeof(Line));p->next=NULL;strcpy(p->data,ch);if(p->data[strlen(p->data)-1]==5){p->data[strlen(p->data)-1]='\0';break;}tail->next=p;tail=tail->next;}if(strlen(p->data)>0){tail->next=p;tail=tail->next;}}}void diaoshi();void menu(){int i;if(m!=1){if(tt!=0){printf("\n\n");diaoshi();printf("\n\n\n\</n;i++)n");}for(i=1;i<=19;i++)printf("★☆"); printf("\n☆ ★");printf("\n★ 这里是文章编辑系统☆"); printf("\n★ ☆\n");for(i=1;i<=19;i++)printf("☆★");printf("\n\n");printf("\t\t¤1.新建文章\t\t");printf("●2.读取文章\n");printf("\t\t¤3.输出文章\t\t");printf("●4.文章统计\n");printf("\t\t¤5.文章编辑\t\t");printf("●6.更改语言\n");printf("\t\t¤7.选择颜色\t\t");printf("●8.帮助说明\n");//关于系统使用的介绍说明及关于我们的团队介绍printf("\t\t¤9.背景音乐");printf("\t\t●0.返回\n");printf("\n");}else{if(tt!=0){printf("\n\n");diaoshi();printf("\n\n\n\n");}for(i=1;i<=19;i++)printf("☆★");printf("\n★ ☆");printf("\n☆ This is article editing system ★");printf("\n☆ ★\n");for(i=1;i<=19;i++)printf("★☆");printf("\n\n");printf("\t¤1.creat a new article\t\t");printf("●2.read the article\n");printf("\t¤3.output the article\t\t");printf("●4.article statistic\n");printf("\t¤5.edit the article\t\t");printf("●6.change language\n");printf("\t¤7.select color\t\t");printf("●8.help(about)\n");printf("\t¤9.background music\t\t");printf("●0.exit\n");}}void tongjimenu(Article head){if(m!=1){printf("\n\n\n ┎━━━━━━━━━━┒\n");printf(" ┃ 统计结果如下┃\n");printf(" ┖━━━━━━━━━━┚\n\n");printf("\t\t\t文章中的字母数为:%d\n",CountLetter(head)); printf("\t\t\t文章中的空格数为:%d\n",CountSpace(head)); printf("\t\t\t文章中的数字数为:%d\n",CountFigure(head)); printf("\t\t\t文章中的汉字数为:%d\n",CountChinese(head)); printf("\t\t\t文章的总字数为:%d\n",CountArticle(head));}else{printf("\n\n\n ┎━━━━━━━━━━━━━━┒\n");printf(" ┃ The statistical result is ┃\n");printf(" ┖━━━━━━━━━━━━━━┚\n\n");printf("\t\t\tthe number of letters is:%d\n",CountLetter(head));printf("\t\t\tthe number of blank space is:%d\n",CountSpace(head));printf("\t\t\tthe number of figures is:%d\n",CountFigure(head));printf("\t\t\tthe number of Chinese is:%d\n",CountChinese(head));printf("\t\t\tthe number of the total words is:%d\n",CountArticle(head));}}void editmenu(){if(m!=1){printf("\n\n\n\t\t ┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t ┃ 文章编辑┃\n");printf("\t\t ┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t ↙ ┃ ┃ ↘\n");printf("\t\t ┏━━┓ ┏━━┓ ┏━━┓ ┏━━┓\n");printf("\t\t ┃1、┃ ┃2、┃ ┃3、┃ ┃4、┃\n");printf("\t\t ┃字符┃ ┃字符┃ ┃字符┃ ┃续写┃\n");printf("\t\t ┃ 串┃ ┃ 串┃ ┃ 串┃ ┃ ┃\n");printf("\t\t ┃统计┃ ┃删除┃ ┃替换┃ ┃文章┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃\n");printf("\t\t ┗━━┛ ┗━━┛ ┗━━┛ ┗━━┛\n\n");printf("\t\t ●-● ●-● ●-● ●-●\n");printf("\t\t ¤ ¤\n");printf("\t\t ¤ 0、返回上层菜单¤\n");printf("\t\t ¤ ¤\n");printf("\t\t ●-● ●-● ●-● ●-●\n");}else{printf("\n\n\n\t\t ┏━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t ┃ edit the article ┃\n");printf("\t\t ┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t / ┃ ┃ \\\n");printf("\t\t ↙ ┃ ┃ ↘\n");printf("\t\t ┏━━━━┓ ┏━━━━┓ ┏━━━━┓┏━━━━┓\n");printf("\t\t ┃1、┃ ┃2、┃ ┃3、┃┃4、┃\n");printf("\t\t ┃sum up ┃ ┃delete ┃ ┃replace ┃┃continue┃\n"); printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃┃to write┃\n");printf("\t\t ┃string ┃ ┃string ┃ ┃string ┃┃ the ┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃┃ article┃\n");printf("\t\t ┃ ┃ ┃ ┃ ┃ ┃┃ ┃\n");printf("\t\t ┗━━━━┛ ┗━━━━┛ ┗━━━━┛┗━━━━┛\n\n");printf("\t\t ●-● ●-● ●-● ●-● ●-● ●-●\n");printf("\t\t ¤ ¤\n");printf("\t\t ¤ 0、Return to the above menu ¤\n");printf("\t\t ¤printf("\t\t ●-● ●-● ●-● ●-● ●-● ●-●\n");}}//文章编辑模块的实现void editmanage(Article &head){int choice;Line *p=head;char cc;int num;char s[100],s1[100],s2[100];do{editmenu();if(m!=1)printf("\t\t请输入您的选择(若要返回上层菜单,请按0):");elseprintf("\t\tPlease input your choice(return to the above menu,please press 0):");scanf("%d",&choice);getchar();//在这里读入得好好处理一下,因为读入整型后就要读入一个字符型。
数据构造课程设计学生信息管理系统C语言编写仅供参考:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define LEN sizeof(LNode)typedef struct LNode{//用于存放学生信息节点int stuNumber;char telenum[50];int age;char chass[50];char deptName[50];/*char zhuanYe[50];char adress[50];*/char name[20];struct LNode *next;}LNode,*Link;//****************创立链表结点************************************************************************** Link createLink(Link L){ //初始化定义函数,声明变量void inserStu(Link L,Link Elem);//定义插入函数int count(Link L);int temp;temp=count(L);printf("节点个数为%d:\n",temp);Link p;int num=1, stuNumber;char telenum[50];char name[20];int age;/* char deptName[50];char adress[50];char zhuanYe[50];*/char chass[50];//开场输出学生信息while(1){printf("请输入学生的信息:学号,,年龄,班级,院系,专业,家庭住址,\n");printf("学号输入负数完毕!\n");printf("请输入学号%d: ",num);scanf("%10d",&stuNumber);if(stuNumber<0) {break;}printf("请输入%d: ",num);getchar();gets(name);printf("请输入年龄%d: ",num);scanf("%d",&age);printf("请输入班级%d: ",num);getchar();gets(chass);printf("请输入: ",num);getchar();gets(telenum);/* printf("请输入院系%d: ",num);getchar();gets(deptName);*/if(stuNumber>=0){p=(Link)malloc(LEN);p->stuNumber=stuNumber;strcpy(p->chass,chass);/* strcpy(p->deptName,deptName);*/p->age=age;strcpy(p->telenum,telenum);strcpy(p->name,name);//插入新结点inserStu(L,p);num++;}}return (L);}//******************打印头结点为L的学生记录********************************************************void printList(Link L){printf("\n*********************学号,,年龄,班级,**************************\n");printf("\n 学号年龄专业班级\n");int n=1;Link p=L;int count(Link L);int temp;temp=count(L);//结点个数:if(temp==0)printf("系统中没有元素\n");//判断学生管理系统中有无信息elsewhile(p->next!=NULL){printf("%2d %-9d",n,p->next->stuNumber);printf("%-8s %-5d %-12s %s \n",p->next->name, p->next->age,p->next->chass,p->next->telenum/*p->next->deptName*/);//首个字符打印不出来p= p->next;n++;}printf("\n****************************************************************************** *****\n");return;}//********************************插入学生信息**************************************void inserStu(Link L,Link Elem){Link prior(Link L,Link p);Link p=L->next;//*******%%%%****while(p!=NULL&&Elem->stuNumber>=p->stuNumber){if(p->stuNumber==Elem->stuNumber){printf("重复输入学号,输入失败!");return ;}p=p->next;}//确定Elem的插入位置if(p==NULL){p=prior(L,p);Elem->next=NULL;p->next=Elem;//假设为空表,插入到头结点之后}else{p=prior(L,p);Elem->next=p->next;p->next=Elem;}}//***********************找到当前地址元素的前一元素的地址*************************************************************************Link prior(Link L,Link p){if(L->next==NULL)return(L);Link p_prior=L;while(p_prior->next!=p){p_prior= p_prior->next ;}return (p_prior);}//********************************8按学号查询学生信息***************************************************************************int searchName(Link L,char n[]){int flag=0;//标志要查找的学生和学生记录中的是否匹配Link p=L->next;int seat=1;if(L->next==NULL||L==NULL)printf("没有学生信息\n");else{while(p!=NULL){if(!strcmp(p->name,n))//比拟要查找的是否和当前学生信息所指的匹配{flag=1;//输入匹配printf("要查找的是第%d位学生\n",seat);printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum);}p=p->next ;seat++;}}return flag;}//****************************************按学号查找学生信息*********************************************************************int searchNum(Link L,int n){int flag=0;//标志要查找的学生和管理信息系统中的学号是否匹配Link p=L->next;int seat=1;if(L->next==NULL)printf("没有学生信息\n");else{while(p!=NULL){if(p->stuNumber<=n){if(p->stuNumber==n)//比拟要查找的学号是否和当前学生信息所指的学号匹配{flag=1;//输入学号匹配printf("要查找的是第%d位学生\n",seat);printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum);}}p=p->next ;seat++;}}return flag;}//*******************************从通讯录中删除第i个元素***************************************************************************void deleteElem(Link L,int i){Link p=L;int j=0;while(p->next&&j<i-1){p= p->next;j++;}if(!(p->next))//判断i时候合法,i不能大于元素的个数,也不能小于等于0{printf("第%d个学生删除失败\n",i);return;}Link q=p->next;p->next=q->next;free(q);}//*******************按删除学生信息******************************************************************************************** **int deleName(Link L, char n[]){ void deteStu(Link);int flag=0;//判断要删除的学生与系统中的是否匹配Link p=L->next;int seat =1;if(L->next==NULL){printf("\n删除提示:系统中没有元素,删除失败!\n");deteStu( L);} else{while(p!=NULL){if(!strcmp(p->name ,n))//比拟名字是否匹配{flag=1;printf("%s",p->name );p=p->next;deleteElem(L,seat);//删除第i个学生的信息}else{p=p->next ;seat++;}if(flag)printf("被删除了\n");}}return flag;}//*****************按学号删除学生信息*****************************************************************int deleNum(Link L,int n){ void deteStu(Link);int flag=0;Link p=L->next ;int seat=1;if(L->next==NULL){printf("\n删除提示:系统中没有元素,删除失败!\n");deteStu( L);}else{while(p!=NULL){if(p->stuNumber==n){flag=1;printf("%d",p->stuNumber);p=p->next;deleteElem(L,seat);break;}p=p->next ;seat++;}if(flag){printf("被删除了\n");}else{printf("没有找到学生信息\n");}}return flag;}//************************************************************************************* void searchWay1(Link L){ void searchMenu(Link L);int searchWay=0;//控制跳出循环,再次选择查询方式if(searchWay==0){printf("请输入要查询的学生的学号:\n");int n,s;scanf("%d",&n);s=searchNum(L, n);if(s==0)printf("查找失败\n");searchWay=1;}if(searchWay==1){searchMenu( L);}}//********************************************************************************void searchWay2(Link L){ void searchMenu(Link L);int searchWay=0;//控制跳出循环,再次选择查询方式if(searchWay==0){char n[20];int flag;printf("请输入要查询的学生\n");char temp2=getchar();gets(n);flag= searchName(L,n);if(flag==0)printf("查找失败!\n");searchWay=1;}if(searchWay==1){searchMenu( L);}}//*****************************************************************8void searchMenu(Link L){int mainMenu();printf(" ********************** 查询菜单************************************** \n");printf(" *** 1 输入学生学号查询学生信息\n");printf(" *** 2 输入学生查询学生信息\n");printf(" *** 3 返回上级菜单\n");printf(" ********************** 查询菜单************************************** \n");printf("请选择1-3: ");int menu;scanf("%d",&menu);switch(menu){case 1:{ searchWay1(L);break;}case 2:{ searchWay2(L);break;}case 3:{break;//跳回主菜单程序}}}//************************************更新学生信息模块*****************************************void alterStu(Link L)//按学号更新学生信息{int n;printf("请输入要修改的学生学号:");scanf("%d",&n);Link p=L->next;if(p==NULL){printf("学生管理系统没有学生信息!");}while(p!=NULL)//循环查找学生信息,如果找到该学号那么进入循环体更改学生信息{//**************************************************************************************** ******if(p->stuNumber==n){int num=1, stuNumber,age;char telenum[50];char name[20];char chass[50];printf("***********************更改学生信息*****************************************\n");printf("请输入学生的学号,和\n");printf("请输入学号%d: ",num);scanf("%d",&stuNumber);printf("请输入%d: ",num);getchar();gets(name);printf("请输入年龄%d: ",num);scanf("%d",&age);printf("请输入班级%d: ",num);getchar();gets(chass);printf("请输入: ",num);getchar();gets(telenum);p->age=age;p->stuNumber=stuNumber;strcpy(p->telenum,telenum);strcpy(p->name,name);strcpy(p->chass,chass);//更新新结点printf("***********************更改学生信息完毕*****************************************\n");//****************************************************************************************** *******}p=p->next;}}//****************保存学生信息模块***************************************************************************void keepStu(Link L){Link p=L->next;FILE* fp;if((fp=fopen("student.txt","r"))==NULL)//翻开文件,不存在此文件那么新建{fp=fopen("E:\\测试\\student.txt","w");fclose(fp);}fp=fopen("E:\\测试\\student.txt","a");while(p!=NULL){fprintf(fp,"%d\t%s\t%s\n",p->stuNumber,p->name,p->telenum);p=p->next;}fclose(fp);printf("文件保存成功!\n");}//********************统计结点个数模块***********************************************************************************int count(Link L){int n=0;Link p=L->next;if(p==NULL){printf("不存在学生信息\n");}while(p!=NULL){p=p->next;n++;}return n;}//********************************导入学生信息模块**********************************************************************Link stuEntry(){FILE* fp;Link p,q ,L;if((fp=fopen("E:\\测试\\student.txt","r"))==NULL)//翻开文件,不存在此文件那么新建{;}L=q=(Link)malloc(LEN);printf("\n学号手机号\n");printf("**********************************************************\n");while(!feof(fp)){p=(Link)malloc(LEN);fscanf(fp,"%d\t%s\t%s\n",&p->stuNumber,&p->name,&p->telenum);printf("\n%d\t%s\t%s\n",p->stuNumber,p->name,p->telenum);q->next=p;q=p;}q->next=NULL;fclose(fp);printf("按任意键完毕:");getch();//返回return L;}//********************添加学生信息**************************************************************************void AddStu(Link L){ int temp;temp=count(L);printf("节点个数为%d:\n",temp);if(temp==0){createLink(L);}//如果没有学生信息那么调用初始化函数createLink(L);}//****************删除学生菜单****************************************************void deteStu(Link L){int flag=0,way,n;printf("\n************************ 删除菜单********************\n");printf("\n选择操作方式************* 1:按学号********************\n");printf(" ************* 2:按********************\n");printf(" ************* 3: 返回主菜单*********************\n");printf("\n请输入删除方式:");scanf("%d",&way);if(way<1||way>3){deteStu(L);}switch (way){case 1: {printf("请输入要删除的学生学号:");scanf("%d",&n);flag= deleNum(L,n);break;}case 2:{char n[20];printf("请输入要删除的学生:");char temp1=getchar();gets(n);flag=deleName(L,n);break;}case 3:{break;}}if(flag){printf("删除成功!\n");deteStu(L);}}//**********************主菜单程序******************************************************************************int mainMenu(){printf("\n****************************欢送使用学生管理信息系统***********************************************\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("* *** 0 退出管理信息系统**** * \n");printf("****************************欢送使用学生管理信息系统***********************************************");int menu=0;printf("请选择0-8:");scanf("%d",&menu);if(menu<0&&menu>8){printf("输入无效,请正确输入有效序号0-8:");scanf("%d",&menu);}return menu;}//**************************main()程序******************************************************************************************** *********void main(){Link L=(Link)malloc(LEN);//在主函数上首先让构造体指针初始化;L->next=NULL;int flag=0;//学生信息是否建立int menu=0;//菜单项选择项do{menu=mainMenu();switch(menu)//用于调用子菜单{case 1:{L=createLink(L);break;}case 2:{printList(L); break;}case 3:{searchMenu(L); break;}case 4:{alterStu(L) ;break;}case 5:{createLink(L);break;}case 6:{deteStu( L); break;}case 7:{keepStu( L); break;}case 8:{L=stuEntry();break;}case 0:{return;}}}while(1);}//****************************************************************************************** ************************************。
上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力二.课程设计内容说明1. 项目一(1) 对设计任务内容的概述学生成绩管理**任务:要求实现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。
存储结构:采用线性链式结构。
(2) 详细设计LinkList *create():输入学生成绩记录函数;void print(LinkList *head):显示全部记录函数LinkList *Delete(LinkList *head):删除记录函数LinkList *Insert(LinkList *head):插入记录函数void menu_select():菜单选择void ScoreManage():函数界面(3) 程序流程图(4) 程序模块及其接口描述该程序可以分为以下几个模块:1、菜单选择:void menu_select();提供五种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。
并将其存入链表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。
链表长度加一,重新存储。
(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。
(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。
对于,学生成绩记录的文件保存以及按学号、姓名等的查询也是缺少的。
还有就是,对于多个学生成绩的操作也是不够的。
改进的方向:在时间许可的条件下,尽量的完善该系统的各种功能,同时也应修改系统,让它更为人性化、简单化,被广大用户所接受。
(8) 对软件的使用说明该软件是属于比较低级的软件,只是包含了课程设计的要求的几个功能:输入、输出、删除、插入。
所以用户在使用的过程中肯定会受到一定的局限性、不方便性,但由于时间的缘故,无法将软件做到尽善尽美。
2. 项目二(1) 对设计任务内容的概述各种排序任务:用程序实现插入法排序、选择法排序、起泡法改进算法排序;利用插入排序、选择法排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
输入的数据形式为任何一个正整数,大小不限。
输出的形式:数字大小逐个递增的数列。
(2) 功能描述该函数有以下几个功能:1)对R[0..n-1]按递增有序进行直接插入排序2)对R[0..n-1]按递增有序进行冒泡排序3)对R[0..n-1]按递增有序进行直接选择排序4)排序后的输出5)调用所有排序,实现排序(3) 程序流程图(4) 详细设计void InsertSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接插入排序void BubbleSort(RecType R[],int n):对R[0..n-1]按递增有序进行冒泡排序void SelectSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接选择排序void disp(RecType R[],int n):排序后的输出void Sort():调用所有排序,实现排序(5) 程序模块及其接口描述该程序分为五个模块:1.输入功能:void Sort()建立一个数组存放用户在键盘上输入的关键字,在分别调用各种排序的函数,对关键字进行排序。
2.直接插入排序功能:void InsertSort(RecType R[],int n)将后一个数与前一个数比较,将其插入到第一个比它大的大的数前面,其余数字往后移一个位置。
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
3.冒泡排序功能:void BubbleSort(RecType R[],int n)在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位exchange,将其初始值设置为非0,表示被排序的表是一个无序的表,每一次排序开始前设置exchange值为0,在进行数据交换时,修改exchange为非0。
在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序。
4.直接选择排序功能:void SelectSort(RecType R[],int n)在无序区里找最小的数,第i小的数字放在第i个位置上,与原来第i个位置上的数字交换。
5.输出功能:void disp(RecType R[],int n)(6) 程序的输入与输出描述输入:要求是10个为数字的关键字;输出:排序后新的序列。
(7) 程序测试输入关键字,调用各种排序函数(8) 尚未解决的问题或改进方向改进方向:虽然给出了它的各种排序的结果,但是没有它的箱子过程,这是我的改进的方向,希望能将每种排序的过程也能展示给用户,来体现它们的不同。
(9) 对软件的使用说明用户只需根据提示,在键盘上输入要排序的10个关键字。
3. 项目三(1) 对设计任务内容的概述有序表的合并要求输入有序表的数据,利用顺序表和链表结构分布完成两个有序表合并功能,并输出合并后的信息。
(2) 功能描述该程序有如下几个功能:1)初始化顺序表2)初始化链表3)建立顺序表4)尾插法建表5)输出合并后的顺序表6)输出合并后的单链表7)合并顺序表8)合并单链表9)调用以上的函数,实现有序表的合并(3) 概要设计或程序流程图(4) 详细设计void InitList(SqList *&L):初始化顺序表void InitList1(LinkList1 *&L):初始化链表void CreateList(SqList *&L,ElemType a[],int n):建立顺序表void CreateListR(LinkList1 *&L,ElemType a[],int n):尾插法建表void DispList(SqList *L):输出合并后的顺序表void DispList1(LinkList1 *L):输出合并后的单链表void UnionList(SqList *LA,SqList *LB,SqList *&LC):合并顺序表void UnionList1(LinkList1 *LA,LinkList1 *LB,LinkList1 *&LC):合并单链表void Union():调用以上的函数,实现有序表的合并。
(5) 程序模块及其接口描述程序有以下几个模块:1)初始化、建立顺序表2)初始化、建立链表3)输出合并后的表4)合并表(6) 调试分析或程序测试有序表的合并:(7) 尚未解决的问题或改进方向不足:不能重复使用程序。
(8) 对软件的使用说明用户只需根据界面的提示,采用对应的操作。
4.项目四(1)对设计任务内容的概述建立二叉树,层序、先序、中序、后序遍历(用递归或非递归的方法都可以)**任务:要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数、输出中序遍历序列的函数、输出后序遍历序列的函数;(2)功能描述1)建立二叉树2)输出二叉树3)先序遍历非递归算法:不为空时,访问根--左--右,采用递归的方法。
4)中序遍历非递归算法:不为空时,访问左--根--右,采用递归的方法。
5)后序遍历非递归算法:不为空时,访问左--右--根,采用递归的方法。
6)层序遍历:运用队列,队列不空时,有左孩子将其入队,有右孩子将其入队,同时出队。
7)调用以上函数实现二叉树的各种遍历(3)概要设计或程序流程图(4)详细设计void CreateBTNode(BTNode * &b,char *str):建立二叉树void DispBTNode(BTNode *b):输出二叉树void PreOrder(BTNode *b):先序遍历非递归算法void InOrder(BTNode *b):中序遍历非递归算法void PostOrder(BTNode *b):后序遍历非递归算法void LevelOrder(BTNode *b):层序遍历(5)程序模块及其接口描述(6)程序的输入与输出描述输入二叉树的按层结点值;输出二叉树先序遍历访问结点的顺序;输出二叉树中序遍历访问结点的顺序;输出二叉树后序遍历访问结点的顺序;输出二叉树层次遍历访问结点的顺序;(7)调试分析或程序测试用户从键盘上输入要创建的二叉树结点:(8)尚未解决的问题或改进方向改进方向:希望能将系统改进的更为人性化,让界面更舒适,操作更简单。
(9)对软件的使用说明用户只需按照界面的提示,采取相应的措施,到时界面会提醒用户键盘输入。
5.项目五(1)对设计任务内容的概述猴子选大王**任务:一堆猴子都有编号,编号是1,2,3 ...m ,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。